谢天谢地,documentation of the SE Math library对于舍入错误非常透明:
如果方法的错误总是小于0.5 ulps,则该方法始终返回最接近精确结果的浮点数;这样的方法是正确舍入的。正确舍入的方法通常是浮点近似的最佳方法;但是,对于许多浮点方法来说,正确舍入是不切实际的。相反,对于Math类,某些方法允许使用1或2 ulps的较大误差范围。非正式地,当1 ulp错误界限时,如果确切结果是可表示的数字,则应将精确结果作为计算结果返回;否则,可以返回包含确切结果的两个浮点值中的任何一个。
每个浮点方法都提到了ulps中的错误界限。特别是Math.log()
:
返回double值的自然对数(基数e)...计算结果必须在精确结果的1 ulp 内
因此,Math.log()
可能会在错误的方向上舍入到最接近的可表示值。
我需要正确舍入实现base- e 日志。我在哪里找到一个?