2014-02-19 3 views
2

Может ли кто-нибудь объяснить, почему это происходит? http://play.golang.org/p/QTaHpUm5P7NaN отличается от NaN в Go?

Извините, что не вставляем код здесь, но я нахожусь в мобильном банкомате.

Я знаю, что могу использовать math.IsNaN(), но я использую оператор сравнения для всех своих тестов.

+0

Возможный дубликат [Что является обоснованием для всех сравнений, возвращающих false для значений NaN IEEE754?] (Http://stackoverflow.com/questions/1565164/what-is-the-rationale-for-all-comparisons-returning -false-for-ieee754-nan-values) – fuz

ответ

9

Как правило, NaN не считается равным любой номер, включая себя. Это потому, что он отображает число за пределами диапазона представления.

Следовательно, нет никакой гарантии, что у вас нет двух номеров вне представления, например 0/0 и квадратного корня из -1.

В самом деле, многие системы полагаются на это неравенство реализовать isNan() как нечто вроде:

define isNaN(x): 
    return x != x 

С NaN Wikipedia page, IEEE 754 определяет, что:

  • −∞ = −∞,
  • +∞ = +∞ и
  • x ≠ NaN для любых x, включая NaN.
+1

ну, угадайте, как isNan() реализован в Go? http://golang.org/src/pkg/math/bits.go?h=IsNaN#L31 – rob74

Смежные вопросы