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精度将自动满足单调性要求


哦,我不知道我读这篇文章时怎么会错过这一部分。无论如何,这完美地回答了这个问题。我已经编辑了一点。