2013-03-08 22 views

Odpowiedz

5

Ale jaka jest różnica między tymi dwoma.

Obie są tym samym. Niektóre platformy decydują się wyświetlać nieliczący się jako pewien wariant NaN, podczas gdy inne wybierają wyświetlanie go jako pewną odmianę IND.

Jak możemy reprezentować oba w C++.

std::numeric_limits<double>::quiet_NaN() (lub float lub long double, jeśli wolisz).

+1

Wygląda na to, że nie są one takie same, per se. Na platformie Microsoft IND wydaje się być specjalnym przypadkiem dla NaN. W szczególności, dla IND, wykładnikiem jest 0xFF, a mantysa jest 0x400000. Każda inna niezerowa mantysa daje NaN. – ysap

2

Jeśli operacja będzie generować większą liczbę dodatnią niż mogłyby być przechowywane w podwójne, operacja zwróci 1.#INF na Windows lub Linux inf

Niektóre operacje nie robią matematycznego sensu, takie jak poświęcenie placu root z liczby ujemnej. Zarówno sqrt(-1.0), jak i log(-1.0) zwrócą NaN, ogólny termin oznaczający "liczbę", która nie jest liczbą ".

Windows wyświetla NaN jako -1.#IND ("IND" dla "nieokreślonego"), podczas gdy Linux wyświetla nan. Inne operacje, które zwrócą wartość NaN, obejmują 0/0, 0 * ∞ i ∞/∞.

Refernce Link1

Refernce Link2

+1

To nie jest Windows kontra Linux, to standardowa biblioteka kompilatora dyktuje, jak powinno być wyświetlane NaN. –

+0

"Niektóre operacje nie mają sensu matematycznego" Operacje mają sens matematyczny, ale wyników nie można zapisać w liczbie zmiennoprzecinkowej, tzn. Sqrt (-1.0) to i, liczba urojona, której nie można przechowywane w float –

Powiązane problemy