Co to jest przepełnienie arytmetyczne?
Przepełnienie arytmetyczne jest stanem występującym w komputerach, szczególnie w dziedzinie programowania komputerowego, gdy obliczenia lub operacje dają wynik, który jest zbyt duży, aby system pamięci lub rejestr mógł go obsłużyć. Przepełnienie może również odnosić się do kwoty o przy danym wyniku przekraczającym pamięć przeznaczoną do przechowywania. W niektórych przypadkach przepełnienie danych może być przechowywane w innym miejscu przechowywania danych; w innych może spowodować awarię programu, powolne działanie lub niedokładne wyniki. Przepełnienie arytmetyczne nie ogranicza się do pełnych komputerów osobistych lub biznesowych, ponieważ proste ręczne kalkulatory i urządzenia komunikacyjne również mają ograniczenia co do wielkości, które mogą obsłużyć.
Programiści zwykle uczą się metod radzenia sobie z błędami przepełnienia arytmetycznego na wczesnym etapie edukacji, ponieważ często są to bardzo częste błędy programowania. Istnieje wiele różnych metod przekazywania przelewów arytmetycznych. Projekt programu odgrywa bardzo ważną rolę; dobrze zaprojektowany program wykorzystujący spójne i poprawne typy i długości danych nie powinien napotykać takich błędów. Jeśli dołożymy wszelkich starań, aby sprawdzić kolejność operacji i utrzymać wszystko spójne, można całkowicie uniknąć błędów przepełnienia.
Innym sposobem radzenia sobie z błędami przepełnienia arytmetycznego jest podział operacji na mniejsze etapy. Często systemowi łatwiej jest poradzić sobie z prostymi, małymi operacjami niż skomplikowane operacje obejmujące duże liczby i nadmierne obliczenia. Gdy nie jest szczególnie ważne, aby zwracana liczba była całkowicie dokładna, czasami wystarczy napisać program w taki sposób, aby powiadomił użytkownika o błędzie przepełnienia, ale mimo to zwraca wartość. Najczęstszym sposobem obsługi błędu przepełnienia arytmetycznego jest całkowite zignorowanie go. Chociaż jest to zwykle nieszkodliwe, może dawać nieprawidłowe wyniki i może zagrozić przydatności i wydajności programu.
Ariane 5 Flight 501 wyraźnie ilustruje niebezpieczeństwa związane z błędami przepełnienia arytmetycznego. Lot był pierwszym uruchomieniem testowym europejskiego systemu uruchamiania Ariane 5, który ponownie wykorzystał znaczną część kodu ze starego systemu Ariane 4. Przyspieszenie Ariane 5 było jednak znacznie większe niż w przypadku Ariane 4, a programowanie nie było wystarczające do obsługi potrzebnych większych wartości. W związku z tym rakieta opuściła zamierzony tor lotu 37 sekund po wystrzeleniu i musiała zostać zniszczona. Ten prosty błąd programowania kosztuje setki milionów dolarów amerykańskich.