Ответ в теме: Порядок выполнения операций и точность

      Комментарии к записи Ответ в теме: Порядок выполнения операций и точность отключены

Главная Форумы Программирование Программирование на С++ Порядок выполнения операций и точность Ответ в теме: Порядок выполнения операций и точность

#2873

Числа в компьютере хранятся в виде мантиссы (дробной части) и порядка (множителя). Образно, число 123.456 – это дробная часть .123456 и порядок равный трем: .123456 * 10^3.

Перед выполнением любых операций над числами выполняется приведение чисел к одному порядку (порядку большего числа). Например:

.12 * 10^1 + .345 * 10^2
=
.012 * 10^2 + .345 * 10^2

Только после этого выполняется операция над мантиссами. Однако, подумайте, что произойдет, если сложить очень большое и очень маленькое число? – при приведении чисел к одному порядку мантисса меньшего числа будет дополнена большим количеством нулей, однако количество разрядов ограничено, поэтому произойдет потеря точности. Однако, при сложении двух (даже очень маленьких чисел) одного порядка – потери точности не будет.

В связи с этим, самая низкая точность рассмотренном примере будет показана в случае, когда начальное значение суммы инициализировано большим числом (при прибавлении к нему 1./10000 результат скорее всего вообще не изменится.
Более хорошие показатели точности будут у случая, когда начальное значение задается нулем, а самые лучшие – если сложение производить в порядке увеличения членов ряда (тогда операции будут происходить над числами примерно одного порядка).