Iva*_*van 1 .net c# floating-point
我需要检查,如果一个浮点(double
)变量a
值恰好等于浮点(double
)变量b
值.我知道浮点类型与所有十进制值没有完全匹配,这样的比较并没有太大的"物理意义",但我仍然需要从二进制的角度检查存储的值是否完全相同.==
在这种情况下使用运营商吗?
如果你试图测试两个double
s在数值上是否相等,你想测试a == b
.
如果您尝试测试两个double
s 是否具有相同的二进制表示,则需要首先获取二进制表示.看来这BitConverter.DoubleToInt64Bits
是一个能为你做到这一点的功能.然后在两个位模式之间进行整数比较.
数字相等和逐位相等之间存在一些差异.首先,如果是a
或者b
是a NaN
,那么a == b
即使a
并且b
具有相同的位模式也将是假的.其次,IEEE浮点有两个零 - 正零和负零.如果a
是正零并且b
是负零,那么a == b
即使a
并且b
具有不同的位模式也是如此.