Przejdź do głównej zawartości

JavaScript posiada w obiekcie Number własność MIN_VALUE, która zwraca najniższą, zmiennoprzecinkową, dodatnią wartość liczbową, jaką może obsłużyć.

Innymi słowy, jest to najmniejsza dodatnia wartość liczbowa bliska 0.

Liczba ta może się różnić w zależności od silnika implementującego specyfikację ECMAScript.

Specyfikacja ECMAScript nie narzuca konkretnej liczby, a jedynie wskazuje, że powinna to być najmniejsza liczba, jaką jest w stanie obsłużyć, w postaci liczby zmiennoprzecinkowej, implementacja danego języka.

Najpopularniejszy silnik implementujący JavaScript, V8, jest w stanie obsłużyć liczbę dodatnią 2-1074, czyli 5E-324 (w zapisie naukowym), lub inaczej, 5⨉10-324.

5e-323 > Number.MIN_VALUE zwróci prawdę.

5e-324 > Number.MIN_VALUE zwróci fałsz.

5e-324 === Number.MIN_VALUE zwróci prawdę.

Jednak w przypadku operacji matematycznych nie możemy polegać na tej wartości, podobnie jak w przypadku operacji na liczbach zmiennoprzecinkowych.

Niedokładne ich zaokrąglanie pojawia się np. przy działaniu\ 1 + 5e-16\ i zamiast\ 1.0000000000000005\ dostajemy\ 1.0000000000000004

1 + 5e-17 zwróci już tylko 1 i wraz ze zmniejszaniem liczby zmiennoprzecinkowej poprzez dopisywanie kolejnych miejsc po przecinku, będzie dalej otrzymywać zaokrąglony wynik dodawania, 1.

0 / 0 zwróci nam NaN, ale minVal / minVal zwróci 1, wyraźnie pokazując, że minVal zerem nie jest.

0 * 0 zwróci 0, niestety tak samo jak minVal * minVal, co może sugerować, że minVal zerem jednak jest.

W rzeczywistości jest to jednak pułapka i to ten sam problem, który dotyka operacji matematycznych wykonywanych na wszystkich zmiennoprzecinkowych liczbach, we wszystkich językach programowania.