IsNan против значения! = Значение на VS2010 для 64 бит - PullRequest
2 голосов
/ 09 февраля 2012

Привет, у меня есть функция, которая дает мне странный вид только в 64-битных сборках.32-битный работает во всех случаях и 64-битный работает в отладке.В любом случае, вот оригинальный код, значение value - это действительное число, например, 5 или 100 и т. Д.

Теперь это работает.значение! = значение все еще действует правильно?я что-то упускаю ... я просто не понимаю, почему старый способ не сработает?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Если это NaN, тогда value!=value будет истинным. Но если это не NaN, не гарантируется, что value!=value будет ложным.

0 голосов
/ 09 февраля 2012

Сравнение значений с плавающей запятой не интуитивно понятно. Каждое значение с плавающей запятой содержит лишь приблизительное представление (хотя некоторые значения являются точными), на которое влияют предыдущие вычисления и обработка. Даже HUGE_VAL может страдать от потери точности в зависимости от режима FPU и обработки значений.

Вместо этого сравните значения с плавающей запятой, используя сравнение эпсилон . Функция is_nan() - это точный способ проверки значения с плавающей запятой для специальных битов, которые обозначают его как специальное представление не числа.

...