Pragnę napisać kilka zdań na temat elementu Biblioteki Standardowej C++, który wydaje się być zapomnianym lub nieznanym przez wielu koderów. Mam oczywiście na myśli nagłówek <limits>
zawierający klasy rodziny std::numeric_limits<>
. Klasy te służą do reprezentacji różnych informacji typów skalarnych. Uzyskujemy z nich wiedzę na temat ograniczeń i cech różnych typów liczbowych. Przykłady:
if( uZmienna< std::numeric_limits<signed int>::max() )
if( fDistance - fRadius < std::numeric_limits<float>::epsilon() )
Oczywiście numeric_limits dają nam więcej informacji niż maksymalna wartość i tzw. epsilon (różnica między 1.0 i najmniejszą wartością większą od 1.0, którą da się zapisać danym typem zmiennoprzecinkowym). Dowiemy się m.in. jak reprezentowana jest wartość nieskończoności i błędu NaN (Not a Number) (te wartości nie są takie straszne), jakie są błędy zaokrąglania, itd. Nie będę tu omawiał tej biblioteki; zachęcam do zapoznania się z opisującym ją dokumentem.
Mam więc nadzieję, że następnym razem, gdy Twój kolega zada Ci pytanie "jaka jest największa wartość, jaką można zapisać w zmiennej typu int
", odpowiesz:
std::numeric_limits<signed int>::max();