非常に興味深いものに出くわしたとき、私は自分の Ruby 1.9 コードのいくつかをテストしていました。誰かがなぜこれが起こっているのか説明できることを願っています。
コードは次のとおりです。
inf = Float::INFINITY
x = inf - inf
y = 0.0/0.0
puts "X is #{x}"
puts "Y is #{y}"
puts "X and Y are both NaN." if x.nan? && y.nan?
puts "This is all as we expected, but here is the mystery..."
puts "X is not equal to Y." if x == y
puts "Surprisingly not even X is equal to X." if x == x
そして、これは出力です:
X is NaN
Y is NaN
X and Y are both NaN.
This is all as we expected, but here is the mystery...
2 つの変数に 2 つの異なる方法で NaN 値を割り当てましたが、それらが等しいかどうかをテストしたところ、そうではありませんでした。その後、ある変数がそれ自体と等しいかどうかをテストしましたが、それは真実ではありませんでした。一部の値がそれ自体と等しいと期待するのは論理的ですが、実際にはそうではありません。
これが NaN 値をテストする正しい方法かどうかはわかりませんが、これらすべての背後にあるものと、Ruby がこのように動作する理由は何かを知りたいのですが?
ありがとうございました