Zakaz przepełnienia, w zmiennoprzecinkowym, x + x + x
jest dokładnie zaokrągloną (tj. Najbliższą) liczbą zmiennoprzecinkową do rzeczywistej 3 * x
, x + x + x + x
wynosi dokładnie 4 * x
i x + x + x + x + x
ponownie jest poprawnie zaokrąglonym przybliżeniem zmiennoprzecinkowym dla 5 * x
.
Pierwszy wynik x + x + x
wynika z faktu, że x + x
jest dokładny. x + x + x
jest zatem wynikiem tylko jednego zaokrąglenia.
Drugi wynik jest trudniejszy, jeden z jego wykazów omówiono tutaj (a Stephen Canon nawiązuje do innego dowodu poprzez analizę przypadku na ostatnich 3 cyfrach x
). Podsumowując, albo 3 * x
jest w tej samej binadzie co 2 * x
albo jest w tej samej binadzie co 4 * x
, iw każdym przypadku można wywnioskować, że błąd trzeciego dodawania anuluje błąd drugiego dodawania ( pierwszy dodatek jest dokładny, jak już powiedzieliśmy).
Trzeci wynik, „ x + x + x + x + x
jest prawidłowo zaokrąglony”, pochodzi z drugiego w taki sam sposób, w jaki pierwszy wynika z dokładności x + x
.
Drugi wynik wyjaśnia, dlaczego 0.1 + 0.1 + 0.1 + 0.1
jest to liczba zmiennoprzecinkowa: liczby 0.4
wymierne 1/10 i 4/10 są aproksymowane w ten sam sposób, z tym samym błędem względnym, po konwersji na zmiennoprzecinkowe. Te liczby zmiennoprzecinkowe mają stosunek dokładnie 4 między nimi. Pierwszy i trzeci wynik pokazują, że 0.1 + 0.1 + 0.1
i 0.1 + 0.1 + 0.1 + 0.1 + 0.1
można oczekiwać, że będą miały mniej błędów, niż można by wywnioskować na podstawie naiwnej analizy błędów, ale same w sobie odnoszą się one tylko do wyników odpowiednio 3 * 0.1
i 5 * 0.1
, co do których można oczekiwać, że będą bliskie, ale niekoniecznie identyczne z 0.3
i 0.5
.
Jeśli będziesz kontynuować dodawanie 0.1
po czwartym dodaniu, w końcu zauważysz błędy zaokrągleń, które powodują, że „ 0.1
dodane do siebie n razy” odbiegają n * 0.1
od n / 10, a jeszcze bardziej odbiegają od n / 10. Gdybyś miał wykreślić wartości „0,1 dodane do siebie n razy” jako funkcję n, zobaczyłbyś linie o stałym nachyleniu w binadach (gdy tylko wynik n-tego dodania ma wpaść do określonej binady, można oczekiwać, że właściwości dodatku będą podobne do poprzednich dodatków, które dały wynik w tej samej binadzie). W tej samej binadzie błąd będzie się zwiększał lub zmniejszał. Gdybyś spojrzał na sekwencję zboczy od binade do binade, rozpoznałbyś powtarzające się cyfry0.1
binarnie przez chwilę. Po tym nastąpiłaby absorpcja i krzywa byłaby płaska.