Sun
13
May 2007
Liczby zmiennoprzecinkowe typu float czy double mogą przyjmować pewne
specjalne wartości, m.in. oznaczające nieskończoność, nazywane -INF i
+INF, a osiągalne w C++ za pomocą nagłówka <limits>
i wywołania
std::numeric_limits<float>::infinity()
.
Ciekawe jest, że w przeciwieństwie do liczb całkowitych dzielenie zmiennoprzecinkowe przez
zero nie powoduje "wywalenia" programu, ale daje w wyniku takie właśnie
nieskończoności.
Z mojego doświadczenia wynika, że zachowują się one absolutnie sensownie. -(+INF) daje -INF, -INF jest mniejsze od każdej liczby a +INF jest większe, -INF jest mniejsze od +INF, +INF - 2.f daje +INF, -INF * -2.f daje +INF itd. Zastanawia mnie więc, dlaczego wszyscy tych specjalnych wartości tak się boją, a nikt ich nie stosuje w swoim kodzie? Ostatnio znalazłem na to kolejny przykład - programiści nVidia w swoich przykładowych kodach używają liczby 1e32f jako wartości specjalnej.