Mas*_*_mj 6 java double-precision exp
我对在java中使用expm1函数感到困惑Math.expm1的Oracle java doc说:
返回exp(x)-1.注意,对于接近0的x的值,expm1(x)+ 1的精确和更接近ex的真实结果而不是exp(x).
但是这个页面说:
但是,对于x的负值,大约为-4和更低,用于计算Math.exp()的算法相对不良,并且会受到舍入误差的影响.使用不同的算法计算ex - 1然后在最终结果中加1是更准确的.
我们应该使用expm1(x)表示负x值还是接近0值?
double位级别的实现意味着您可以将doubles 存储在0附近,其精度比doubles近1 更高.这就是为什么expm1可以为近零功率提供比精度更高的精度exp,因为double没有足够的精度来存储准确的数字非常接近1.
我不相信你引用的文章是正确的,只要准确性Math.exp(模数的限制double).该Math.exp规范保证结果内的确切值,这意味着1 ULP -过于简单化位-至多2 ^ -52,杂交的相对误差.
您可以使用expm1(x)接近0的任何值.正面或负面.
原因是因为exp(x)接近0的任何东西都会非常接近1.因此exp(x) - 1当x接近0 时会遭受破坏性消除.
expm1(x) 经过适当优化,以避免这种破坏性的取消.
从数学方面来说:如果exp使用其泰勒级数实现,那么expm1(x)可以通过简单地省略第一个来完成+1.
| 归档时间: |
|
| 查看次数: |
1947 次 |
| 最近记录: |