评估日志(经验( x ) + 1 )log⁡(exp⁡(x)+1)对于负Xx

计算科学 浮点 精确 计算机算术
2021-12-10 15:49:01

使用双精度,我得到,它已经有不正确的数字,并且,它只有两个正确的数字。log(exp(3)+1)=0.0485873515737419584log(exp(30)+1)=9.348...×1014

绕过这个的最优雅的方法是什么?我在附近尝试了泰勒级数,但即使有 14 个术语,我仍然没有正确获得的所有数字。log(y)y=1x=3

2个回答

使用(IEEE 标准)库函数log1p,它应该存在于所有编程语言中。该函数log1p(x)返回较小时特别注意准确性。它旨在解决此类问题。log(1+x)x

如果您想使用自己的实现来评估函数,请查看这篇文章否则,只需按照@Frederico Poloni 在他的回答中的建议使用 log1p。

有关 log1p 函数的更多信息,请阅读同一作者的另一篇文章