我一直没能找到不承担已经知道事情的任何信息网上。我想知道是否有人知道我可以研究哪些好的资源来帮助我围绕这个函数做什么?有人可以解释Math.ulp(double)方法吗?
从我所收集的,我敢肯定这是错误的,或者至少不完全正确的,是给定一个浮点,它决定本身和若干接下来的序列之间的距离?似乎有些数字是按位表示的,但我所阅读的资料从未明确地说过。
我一直没能找到不承担已经知道事情的任何信息网上。我想知道是否有人知道我可以研究哪些好的资源来帮助我围绕这个函数做什么?有人可以解释Math.ulp(double)方法吗?
从我所收集的,我敢肯定这是错误的,或者至少不完全正确的,是给定一个浮点,它决定本身和若干接下来的序列之间的距离?似乎有些数字是按位表示的,但我所阅读的资料从未明确地说过。
http://matlabgeeks.com/tips-tutorials/floating-point-comparisons-in-matlab/值
所示它相当好:
float2bin(A)
// ANS = 0011111110111001100110011001100110011001100110011001100110
float2bin(B)
// ANS = 0011111110111001100110011001100110011001100110011001100110
可以看到在这个例子中二进制级别的精度差异。 A和B相差6 ulps(单位在最后)
我相信,它显示您指定的号码,并可以被编码的下一个最大的二进制浮点之间的距离。
由于二进制浮点数覆盖的范围及其精度,并不是所有两个给定实数之间的所有数字都被覆盖,所以看起来这是给出了您希望编码的数字与它将被存储的实际数量。
至少精度(ULP)的单位为浮点数之间的间距,即,至少显著数字表示,如果它是1
请参阅[IEEE浮点](http://en.wikipedia.org/wiki/IEEE_floating_point)以了解大多数计算机如何存储浮点数; Java的'float'和'double'对应于binary32和binary64 IEEE浮点类型。 – Jesper