Я тестировал свой код 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...
Я присвоил значение NaN двумя разными способами двум переменным, и когда я проверил, равны ли они, это было не так. После этого я проверил, равна ли одна переменная самой себе, и даже это было неправдой. Логично ожидать, что какое-то значение равно самому себе, но, как мы видим, это не так.
Я не знаю, правильный ли это способ проверки значений NaN, но мне бы очень хотелось узнать, что стоит за всем этим, и есть ли причина, по которой Ruby ведет себя так?
Спасибо