std::numeric_limits<T>

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() )
//przekroczono maksymalna wartosc int'a
//uZmienna ma typ unsigned int

if( fDistance - fRadius < std::numeric_limits<float>::epsilon() )
//fDistance i fRadius sa typu float
//przykladowy kod mogacy pochodzic z niezbyt zoptymalizowanego
//sprawdzania kolizji sferami otaczajacymi
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();