3

浮動小数点の等値比較では、奇妙なエッジ ケースが発生することがあります。たとえば、2 つの NaN 値が同一のビット パターンであっても等しくないと比較されるなどです。

しかし、不平等は常に平等の逆であると仮定できますか? つまり、標準の IEEE 64 ビット浮動小数点数が x64 などの主流のアーキテクチャに実装されていると仮定すると、どのビット パターンが存在するかに関係なく、 と のいずれかが常に真になるのでしょうかa == b?a != b

4

2 に答える 2

4

はい、これは常に真です。演算子 == が != に対して正反対の値を返さないビット パターンの数値解釈はありません。

異なるビット パターン (負のゼロ 0x80... はゼロ 0x00 と等しい...) と等しいと比較されるビット パターン、または既に述べたように同じビット パターンが等しくない (NaN) と比較される例外がありますが、!= は常に== の反転。

于 2013-04-05T18:05:41.260 に答える
2

どの関係がテストされているかについて注意する必要があります。「x と y の値が異なるか?」には、さまざまなテストがあります。と「x は y と等しくありませんか?」</p>

x または y が NaN、またはその両方である場合、それらが異なる値を持っているというのは false ですが (少なくとも 1 つはまったく値を持っていないため)、等しいということはありません。

C 演算子!=は「等しくない」について尋ねるので、後者の質問に答えます。そして「等しくない」を問うので、「等しい」の論理否定です。

一部の言語では、前者の質問をする方法が提供されています。

于 2013-04-05T18:20:38.950 に答える