Java-具有正确舍入的自然对数
谢天谢地,关于舍入误差,这个问题是非常透明的: 如果一个方法的错误总是小于0.5 ulps,那么该方法总是返回最接近精确结果的浮点数;这种方法是正确的四舍五入。一个正确的四舍五入方法通常是浮点近似的最佳方法;然而,要使许多浮点方法正确地四舍五入是不切实际的。相反,对于Math类,某些方法允许1或2个ULP的更大错误范围。非正式地说,在1 ulp错误范围内,当精确结果是可表示的数字时,应将精确结果作为计算结果返回;否则,可能会返回包含精确结果的两个浮点值中的任何一个 每个浮点方法在ulps中都提到了它的错误界限。特别是对于Java-具有正确舍入的自然对数,java,floating-accuracy,Java,Floating Accuracy,谢天谢地,关于舍入误差,这个问题是非常透明的: 如果一个方法的错误总是小于0.5 ulps,那么该方法总是返回最接近精确结果的浮点数;这种方法是正确的四舍五入。一个正确的四舍五入方法通常是浮点近似的最佳方法;然而,要使许多浮点方法正确地四舍五入是不切实际的。相反,对于Math类,某些方法允许1或2个ULP的更大错误范围。非正式地说,在1 ulp错误范围内,当精确结果是可表示的数字时,应将精确结果作为计算结果返回;否则,可能会返回包含精确结果的两个浮点值中的任何一个 每个浮点方法在ulps中都提到
Math.log()
:
返回双精度值的自然对数(以e为底)…计算结果必须在精确结果的1 ulp范围内
因此,Math.log()
我需要一个正确的base-e日志实现。我在哪里可以找到一个?你看到这个了吗:?BigDecimal应该提供更好的精度,并且应该允许您选择舍入逻辑。(几乎可以肯定的是,计算成本会更高。)从log()
中要求精确的四舍五入结果会陷入制表商的两难境地,是真正的四舍五入问题,还是股票数学库的精度不够?正如其他人所说,通过使用具有更多可选精度的格式,精度问题很容易解决。然而,如果问题真的是在选定精度的极限下的舍入行为,那么这是一个技术性很强的问题,不会那么容易处理。您看到了吗?BigDecimal应该提供更好的精度,并且应该允许您选择舍入逻辑。(几乎可以肯定的是,计算成本会更高。)从log()
中要求精确的四舍五入结果会陷入制表商的两难境地,是真正的四舍五入问题,还是股票数学库的精度不够?正如其他人所说,通过使用具有更多可选精度的格式,精度问题很容易解决。然而,如果问题真的是在选定精度的极限下的舍入行为,那么这是一个技术性很强的问题,不太容易处理。