W tym artykule omówię liczby zmiennoprzecinkowe zgodne ze standardem IEEE 754, które są dostępne w większości języków programowania, a także opiszę ich budowę, możliwości i ograniczenia. Odniosę się również do powszechnie panujących przekonań, iż liczby te są niedokładne lub iż są niedeterministyczne. Pokażę ponadto wiele nieoczywistych pułapek, które czyhają na używających ich programistów. Ta wiedza może się przydać każdemu, obojętnie, w jakim języku i na jakie platformy programujesz!
Liczby zmiennoprzecinkowe to świetny wynalazek. Dostępne w językach programowania typy danych tego rodzaju pozwalają na niewielkiej liczbie bitów zapisywać liczby dodatnie, jak i ujemne, całkowite, jak i ułamkowe, bardzo małe (bliskie zeru), jak i bardzo duże. Ponieważ komputery na początku służyły głównie naukowcom do wykonywania obliczeń, historia różnych sposobów kodowania liczb jest tak stara, jak historia samej informatyki. Standard IEEE 754, na którym opierają się używane współcześnie liczby zmiennoprzecinkowe, pojawił się w roku 1985. To jego używają wszystkie typy danych, o których będziemy mówić w tym artykule...
Zagadnienia poruszane w tym artykule:
- Podstawy;
- Wsparcie sprzętowe;
- Czy te liczby są niedokładne?
- Reprezentowanie liczb całkowitych;
- Skończona dokładność;
- Catastrophic cancellation;
- Czy te liczby są niedeterministyczne?
- Wartości specjalne;
- Mniejsze formaty.
Artykuł pochodzi z magazynu Programista nr 115 (5/2024). Szczegółowy spis treści wydania nr 115: https://programistamag.pl/programista-5-2024-115/
Autorem tego artykułu jest Adam Sawicki. Programista zainteresowany głównie tematem grafiki i gier. Aktualnie pracuje jako PMTS Software Development Engineer w AMD, wcześniej m.in. w firmie Intel, Microsoft, w branży gier, w telewizji. Ma szerokie doświadczenie – od niskopoziomowego programowania sterowników graficznych i silników gier po fotografię, montaż wideo i VJ-ing na imprezach. Mgr inż. informatyk – absolwent Politechniki Częstochowskiej. Autor wielu artykułów i prelekcji. Od ponad 20 lat prowadzi bloga asawicki.info.