在回顾另一位程序员对某个函数的实现以计算正态分布CDF的实现时,我建议用Python的内置函数替换整个实现,或者使用通用的科学库SciPy。
另一位程序员指出,他们的文档中也math.erfc()
没有scipy.stats.norm.cdf()
提供任何精度保证。因此,在替换近似算法(该算法取自颇受好评的源,并记录了错误范围)时,我应该格外谨慎。
老实说,怀疑内置或库函数的准确性和精确度的想法从来没有想到。毕竟,多年来我一直在不停地调用诸如sin()
和之类的函数,sqrt()
为什么math.erf()
还是scipy.stats.norm.cdf()
应该有所不同呢?
但是现在,我很担心。我的问题是:
- 通常,如果文档中没有特别提及,是否暗示这些功能在IEEE双精度浮点提供的精度范围内完全精确到最后一位小数?
- 尤其是对于Python
math.erf()
或SciPy而言,这是真的scipy.stats.norm.cdf()
吗?你怎么知道? 此手册页
sin()
说……当它们的参数接近pi的倍数或远离0.0时,这些函数可能会失去准确性。
当正弦函数是周期性且对称的时,为什么要存在这样的警告?似乎给调用者增加了规范输入以获取最佳准确性的负担。
另一方面,Mozilla的文档中
Math.sin()
没有提及准确性或精度。这是否意味着它是完全准确的,还是Math.sin()
仅在某些情况下才像其他地方一样在JavaScript中才是准确的“常识” ?