INF-y i NAN-y

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

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.

Comments | #c++ #math Share

Comments

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2020