Answers:
这是取消错误的实例。C标准库(从C99开始)包括一个名为的函数expm1
,可以避免此问题。如果使用expm1(x) / x
代替(exp(x) - 1.0) / x
,则不会遇到此问题(请参见下图)。
在数值算法的准确性和稳定性的 1.14.1节中详细讨论了这个特殊问题的细节和解决方案。在W. Kahan的论文的第19页中也解释了相同的解决方案,该论文的标题为浮点计算中舍入的无心评估有多无效?。expm1
在GNU C库中的实际实现与上面的参考文献中描述的方法不同,并且在源代码中有详细记录。