在检查 Float.compare(f1,f2) 后,我发现它比较了 f1f2
并返回 -1,0,1。
如果值为 -0.0、0.0 或 NAN,则返回 -1,0,1。
-0.0 是什么意思?
我本来期望像
return (Math.abs(f1 - f2) - 0.001f) > 0)
其中 0.001 是给定的 epsilon 值。
谢谢。
在检查 Float.compare(f1,f2) 后,我发现它比较了 f1f2
并返回 -1,0,1。
如果值为 -0.0、0.0 或 NAN,则返回 -1,0,1。
-0.0 是什么意思?
我本来期望像
return (Math.abs(f1 - f2) - 0.001f) > 0)
其中 0.001 是给定的 epsilon 值。
谢谢。
-0.0
是负零,由IEEE 754 标准规定。
如果您对如何产生这样的值感到好奇,以下文章可以很好地解释它: http: //www.savrola.com/resources/negative_zero.html
至于不采用 epsilon 值,这就是Float.compare
设计工作的方式(这是精确比较,而不是近似比较)。没有什么可以阻止您使用另一个比较函数,该函数确实需要一个 epsilon 并执行近似比较。
浮点数的精确比较和近似比较都有其用途。
至于您的实际代码,它存在许多问题:
Float.compare
;NaN
s;f1
and进行缩放f2
(请参阅本文进行讨论)。我的意思不是批评您的代码,而是表明编写好的浮点代码比看起来更难。