对于大 n,java.lang.Math.pow(x, n) 的准确/精确度如何?

2023-12-21

我想计算一下(1.0-p)^n其中 p 是 0 到 1 之间的双精度值(通常非常接近 0),n 是一个正整数,可能约为数百或数千(可能更大;我还不确定)。如果可能的话我想只使用Java的内置java.lang.Math.pow(1.0-p, n)为此,但我有点担心,在我感兴趣的值范围内这样做可能会导致准确性/精度的巨大损失。是否有人粗略地了解我可能会使用哪种错误Java的实现?我不确定他们的实现中到底发生了什么(日志和/或泰勒近似?),所以我不能冒险一个好的猜测。

我最关心的是相对误差(即偏差不超过一个数量级)。如果答案是 Java 的实现会产生太多错误,您是否有任何好的库推荐(但我再次希望这不需要)?谢谢。


根据 API 文档: http://download.oracle.com/javase/6/docs/api/java/lang/Math.html#pow%28double,%20double%29

计算结果与准确结果的误差必须在 1 ulp 以内。

因此,我认为您不需要担心实现,而需要担心浮点精度的限制。您可能需要考虑使用BigDecimal.pow()如果您最关心的是准确性而不是性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于大 n,java.lang.Math.pow(x, n) 的准确/精确度如何? 的相关文章