非整数ULP错误?

时间:2012-03-23 21:55:53

标签: java math precision floating-accuracy

我对浮点精度有疑问。据我了解,ULP是给定规格中两个连续离散有限数之间的距离。或者名称中最不重要的单位。无论如何,我在java.lang.Math中看到了关于sinh的Java规范:

“计算结果必须在精确结果的2.5 ulps范围内。”

我不明白你怎么会有一个不是整数的ULP错误。如果你的距离是2.5 ULP,那是否意味着没有一个地方比最不重要的地方重要?误差为2.5 ULP是什么意思?

3 个答案:

答案 0 :(得分:7)

考虑计算3/2。确切的结果是1.5。在整数运算中,结果为1.这是0.5的误差,即ULP的一半。

类似的推理可能适用于浮点运算。

答案 1 :(得分:0)

不,因为您将确切的值与计算值进行比较。

如果您的ULP为1且结果为0.5,则您的错误将为0.5 ULP。

答案 2 :(得分:0)

您无法在ULP适用的相同编号系统中使用小数ULP测量错误。但是,例如,您可以计算float值,但使用double进行中间计算。在这种情况下,double值将是(更多)精确值,float将是舍入值。两者之间的差异将小于浮动的ULP。

这与Math.sinh()相关,因为它是核心语言API的一部分,因此Javadoc充当所有符合要求的实现必须遵守的规范。 Oracle JDK实现将计算委托给本机方法。基本上Javadoc所说的是,“只要你可以保证它总能返回一个足够好的值,你就可以自由地实现这个方法。”