最小的浮点值 A 是(x < x + A) == true
多少?
我尝试使用 Float.MIN_VALUE 但令人惊讶的是(?[1])它不起作用(除了 0 的值。)
知道 IEEE 754 标准如何存储浮点值,我可以将 1 加到相关浮点数的尾数上,但这个接缝真的很糟糕。我不想将字节数组和位操作放在我的代码中,因为这样一件小事,尤其是在 Java 中。另外,如果我只是将 1 加到 Float.floatToIntBits() 并且尾数全为 1,它会将指数增加 1 并将尾数设置为 0。如果它,我不想实现对这种情况的所有处理没有必要。
是不是有某种函数(希望是内置的)给定浮点 x,它返回最小的浮点 A(x < x + A) == true
呢?如果没有,实现它的最干净的方法是什么?
我使用它是因为我如何迭代一行顶点
// return the next vertices strictly at the left of pNewX
float otherLeftX = pOppositeToCurrentCave.leftVertexTo(pNewX);
// we add MIN_VALUE so that the next call to leftVertexTo will return the same vertex returned by leftVertexTo(pNewX)
otherLeftX += Float.MIN_VALUE;
while(otherLeftX >= 0 && pOppositeToCurrentCave.hasLeftVertexTo(otherLeftX)) {
otherLeftX = pOppositeToCurrentCave.leftVertexTo(otherLeftX);
//stuff
}
现在由于这个问题,第一个顶点总是被跳过,因为第二次调用leftVertexTo(otherLeftX)
不会返回它在第一次调用时返回的相同值
[1] 并不奇怪。在我注意到这个问题后我碰巧意识到,由于浮点数之间的差距是相对的,对于任何数字!= 0 MIN_VALUE 是如此之小以至于它会被截断并且(x = x + FLOAT.MIN_VALUE) == true