Если речь о результатах, то в компьютерной арифметике числа представляются в двоичном коде, а точность их представления обычно ограничена разрядностью процессора. Для проведения расчетов с неограниченной точностью используются специальные алгоритмы с представлением чисел в виде символьных строк. При использовании двоичной арифметики приходится сталкиваться с тем, что большинство нецелых чисел невозможно точно представить в двоичной системе, как нельзя, например, в десятичной системе точно представить в виде десятичной дроби число 1/3 = 0.333 Рассмотрим пример. Если в простых дробях (1/3) х 3 = 1, то в десятичных 0.3333 х 3 = 0.9999. В двоичной машинной арифметике происходит аналогичная ситуация. Но если человек сознает, что результат 0.9999... - та же единица, то компьютер этого не понимает. В результате в компьютерной арифметике (1 / 3) х 3 не равняется единице. Еще пример. Пусть нам надо вычислить значение функции в точках от -2π до 2π с шагом π/6. Человек будет использовать значения -2π, -11π/6, -10π/6 и т.д. пока не придет к точке 2π. Компьютер (в арифметике с обычной точностью) вычислит значение -2π как -6.283185, а шаг представит значением 0.5235988. Это приведет к тому, что когда мы придем к нулю, то получим значение аргумента -9.536743х10⁻⁷, а в конечной точке получим аргумент 6.283184, который по абсолютной величине отличается от начального на единицу в младшей цифре, т.е. для компьютера при таком последовательном счете |-2π| ≠ 2π. Третий пример. отрицательные целые числа представляются в компьютере в дополнительном коде, когда старший разряд является знаковым: 0 - это плюс, 1 - это минус. Пусть мы прибавляем к 127 единицу в арифметике целых чисел, которым в двоичном представлении отведен один байт: 1111111₂ + 1₂ = 10000000₂ - тут все понятно, единичка перешла в старший, восьмой разряд. Но ведь он ЗНАКОВЫЙ! И вместо двоичного эквивалента 128 в компьютерной арифметике мы получаем отрицательное число! Причем, что самое интересное, из соображений эффективности эта ситуация обычно аппаратно не контролируется и в результате программы могут вести себя очень странно.
1. Войти на кухню.
2. Открыть шкаф.
3. Взять чашку.
4. Поставить ее на стол.
5. Закрыть шкаф.
6. Взять чайник.
7. Включить газ.
8. Зажечь спичку.
9. Зажечь газ в конфорке с спички.
10. Поставить чайник на огонь.
11. Открыть шкаф.
12. Взять сахарницу.
13. Закрыть шкаф.
14. Открыть ящик.
15. Взять ложку.
16. Закрыть ящик.
17. Набрать в ложку сахар.
18. Положить сахар в чашку.
19. Положить ложку на стол.
20. Открыть шкаф.
21. Взять пакетик чая.
22. Закрыть шкаф.
23. Положить пакетик чая в чашку.
24. Когда чайник закипел, выключаем конфорку.
25. Берем чайник.
26. Наливаем воду в чашку.
27. Ставим чайник.
28. Берем ложку.
29. Мешаем.
30. Кладем ложку на стол.
31. Пьем.