61
Matematyka i fizyka / Odp: Zmienna ściśle dodatnia
« dnia: Styczeń 16, 2016, 15:22:06 »
Mogłeś już napisać jaki, bo nie wszyscy wiedzą. Chodzi o tzw. NaN - "Not a Number". Ta specjalna wartość oznacza swego rodzaju "błąd". Każda operacja z NaN-em da ponownie NaN i każde porównanie z nim zwróci false, nawet jego z samym sobą.
(2.0f == NaN) == false
(NaN == NaN) == false
Można to sobie wyobrazić tak, że oprócz normalnych liczb dodatnich i ujemnych we floatach mamy wartości specjalne:
- -0 i +0, które wychodzą, kiedy wynik operacji jest zbyt mały, żeby się go dało zapisać.
- -INF i +INF, które wychodzą, kiedy wynik operacji jest zbyt duży, żeby się go dało zapisać.
- NaN, który wychodzi, kiedy wynik operacji już w ogóle nie ma sensu, np. 0/0.
Taki NaN jest "po cichu" propagowany przez kolejne operacje, w przeciwieństwie do dzielenia przez zero liczb typu int, które to powoduje wywalenie się programu.
(2.0f == NaN) == false
(NaN == NaN) == false
Można to sobie wyobrazić tak, że oprócz normalnych liczb dodatnich i ujemnych we floatach mamy wartości specjalne:
- -0 i +0, które wychodzą, kiedy wynik operacji jest zbyt mały, żeby się go dało zapisać.
- -INF i +INF, które wychodzą, kiedy wynik operacji jest zbyt duży, żeby się go dało zapisać.
- NaN, który wychodzi, kiedy wynik operacji już w ogóle nie ma sensu, np. 0/0.
Taki NaN jest "po cichu" propagowany przez kolejne operacje, w przeciwieństwie do dzielenia przez zero liczb typu int, które to powoduje wywalenie się programu.