java.lang.Math—;是“;在1 ULP和x201D范围内;排他性的还是包容性的?
java.lang.Math—;是“;在1 ULP和x201D范围内;排他性的还是包容性的?,java,floating-point,precision,floating-accuracy,Java,Floating Point,Precision,Floating Accuracy,java.lang.Math文档中提到了许多函数,例如: 计算结果必须在精确结果的1 ulp范围内 但我还没有找到这到底意味着什么。它是排他性的还是包容性的?换句话说,如果精确结果可以用double表示,那么返回值将包含精确结果,还是仍可能被1 ULP关闭 例如,我们可以依赖Math.pow(3.0,2.0)==9.0?我知道,对双打来说,使用平等比较几乎总是一个坏主意,所以我问这个问题主要是出于好奇,并且当人们做类似的事情时,能够指出他们的错误(或让他们放心)。 实施规范的质量涉及两个属性,
java.lang.Math
文档中提到了许多函数,例如:
计算结果必须在精确结果的1 ulp范围内
但我还没有找到这到底意味着什么。它是排他性的还是包容性的?换句话说,如果精确结果可以用double表示,那么返回值将包含精确结果,还是仍可能被1 ULP关闭
例如,我们可以依赖Math.pow(3.0,2.0)==9.0
?我知道,对双打来说,使用平等比较几乎总是一个坏主意,所以我问这个问题主要是出于好奇,并且当人们做类似的事情时,能够指出他们的错误(或让他们放心)。
实施规范的质量涉及两个属性,
返回结果的准确性和方法的单调性。
浮点数学方法的精度是根据
ulps,最后一个位置的单位。对于给定的浮点格式
特定实数值的ulp是两者之间的距离
括住该数值的浮点值。讨论时
一种方法作为一个整体而不是某一特定位置的准确性
参数中引用的ULP数是任何情况下最坏的错误数
论点如果某个方法的错误始终小于0.5 ulps,则
方法始终返回最接近精确值的浮点数
结果;这种方法是正确的四舍五入。正确的四舍五入方法
通常是浮点近似的最佳值;然而,
对于许多浮点方法来说,正确地使用它们是不切实际的
四舍五入
相反,对于Math类,更大的错误范围是1或2个ULP
允许使用某些方法非正式地,具有1 ulp错误界限,
当精确结果是一个可表示的数字时,精确结果
应作为计算结果返回;否则
两个包含精确结果的浮点值可能是
已返回。
对于数量级较大的精确结果,则
括号可以是无限的。除了个人论点的准确性,
在不同参数下保持方法之间的正确关系
这一点也很重要。因此,大多数方法的ulp大于0.5
误差必须是半单调的:只要数学模型
函数是非递减的,浮点近似也是如此,
同样,只要数学函数是非递增的,它也是非递增的
浮点近似。并非所有具有1的近似值
ulp精度将自动满足单调性要求
哦,我不知道我读这篇文章时怎么会错过这一部分。无论如何,这完美地回答了这个问题。我已经编辑了一点。