🧮 Inne ✓ Liczy na żywo

Kalkulator liczb zmiennoprzecinkowych

Do czego służy

Ten kalkulator pokazuje zapis liczby w standardzie IEEE 754 — bit znaku, wykładnik i mantysę — oraz ujawnia, czy liczba ma dokładną reprezentację w systemie dwójkowym.

🧮 Policz od razu

Dlaczego 0,1 + 0,2 nie daje 0,3

To pytanie zadaje sobie każdy początkujący programista. Odpowiedź jest prosta: 0,1 nie ma dokładnej reprezentacji w systemie dwójkowym — podobnie jak 1/3 nie ma jej w dziesiętnym. Komputer zapisuje najbliższą możliwą wartość, czyli 0,1000000000000000055511151231257827. Po dodaniu dwóch takich przybliżeń otrzymujemy 0,30000000000000004.

reklama AdSense — prostokąt 336×280

Budowa liczby zmiennoprzecinkowej

Standard IEEE 754 dzieli bity na trzy części. W formacie 64-bitowym (double): 1 bit znaku, 11 bitów wykładnika i 52 bity mantysy. W 32-bitowym (float): odpowiednio 1, 8 i 23. Wartość powstaje jako mantysa pomnożona przez dwa do potęgi wykładnika — to zapis naukowy przeniesiony na system dwójkowy.

Które liczby zapisują się dokładnie

Wyłącznie te, których część ułamkowa jest sumą potęg dwójki: 0,5 (1/2), 0,25 (1/4), 0,75 (1/2+1/4), 3,125 i tak dalej. Wszystkie liczby całkowite do 2⁵³ też zapisują się dokładnie. Zawodzą natomiast 0,1, 0,2, 0,3 — a więc niemal wszystko, co pojawia się w obliczeniach na pieniądzach.

Jak sobie z tym radzić

Trzy sprawdzone sposoby. Po pierwsze: nigdy nie porównuj liczb zmiennoprzecinkowych operatorem równości — sprawdzaj, czy różnica jest mniejsza od małej wartości progowej. Po drugie: przy kwotach pieniężnych przechowuj grosze jako liczby całkowite zamiast złotówek jako ułamków. Po trzecie: w bazach danych używaj typu dziesiętnego, który przechowuje cyfry, a nie przybliżenie binarne.

Kiedy się przydaje?

Przy nauce programowania i architektury komputerów, przy debugowaniu dziwnych wyników obliczeń, przy projektowaniu systemów finansowych, przy pracy z systemami wbudowanymi o ograniczonej precyzji oraz przy przygotowaniach do egzaminów z informatyki.

Wartości specjalne

Standard rezerwuje kilka kombinacji bitów na wartości szczególne: dodatnią i ujemną nieskończoność, wartość nieokreśloną NaN (wynik dzielenia zera przez zero albo pierwiastka z liczby ujemnej) oraz osobne zero dodatnie i ujemne. Ta ostatnia osobliwość sprawia, że w większości języków programowania zero dodatnie równa się ujemnemu, choć ich zapisy bitowe różnią się bitem znaku.

Najczęstsze pytania

Dlaczego 0,1 + 0,2 daje 0,30000000000000004?
Bo ani 0,1, ani 0,2 nie mają dokładnej reprezentacji dwójkowej. Komputer sumuje przybliżenia, a błędy się kumulują.
Które liczby zapisują się dokładnie?
Te, których część ułamkowa jest sumą potęg dwójki — 0,5, 0,25, 0,75 — oraz liczby całkowite do 2⁵³.
Jak porównywać liczby zmiennoprzecinkowe?
Nie operatorem równości, tylko sprawdzając, czy różnica jest mniejsza od przyjętej wartości progowej.
Jak przechowywać kwoty pieniężne?
Jako liczby całkowite w groszach albo w typie dziesiętnym bazy danych — nigdy jako zwykłe liczby zmiennoprzecinkowe.

Masz inne pytanie?

Tryb:
✅ Odpowiedź

Podobne kalkulatory