在c#中检查浮点变量以获得精确值相等的正确方法是什么?

Iva*_*van 1 .net c# floating-point

我需要检查,如果一个浮点(double)变量a值恰好等于浮点(double)变量b值.我知道浮点类型与所有十进制值没有完全匹配,这样的比较并没有太大的"物理意义",但我仍然需要从二进制的角度检查存储的值是否完全相同.==在这种情况下使用运营商吗?

tmy*_*ebu 8

如果你试图测试两个doubles在数值上是否相等,你想测试a == b.

如果您尝试测试两个doubles 是否具有相同的二进制表示,则需要首先获取二进制表示.看来这BitConverter.DoubleToInt64Bits是一个能为你做到这一点的功能.然后在两个位模式之间进行整数比较.

数字相等和逐位相等之间存在一些差异.首先,如果是a或者b是a NaN,那么a == b即使a并且b具有相同的位模式也将是假的.其次,IEEE浮点有两个零 - 正零和负零.如果a是正零并且b是负零,那么a == b即使a并且b具有不同的位模式也是如此.

  • 给你一个投票,以解决这些更好的点. (2认同)