Разница в точности при делении с плавающей запятой и умножении

Есть ли разница между этим:

average = (x1+x2)/2;
deviation1 = x1 -average;
deviation2 = x2 -average;
variance = deviation1*deviation1 + deviation2*deviation2;

и этим:

average2 = (x1+x2);
deviation1 = 2*x1 -average2;
deviation2 = 2*x2 -average2;
variance = (deviation1*deviation1 + deviation2*deviation2) / 4;

Обратите внимание, что во второй версии я пытаюсь отложить деление как можно позже. Вторая версия [деления задержки] увеличивает точность в целом?

Фрагмент выше предназначен только в качестве примера, я не пытаюсь оптимизировать этот конкретный фрагмент.

Кстати, я спрашиваю о делении в целом, а не только о 2 или степени 2, поскольку они сводятся к простым сдвигам в представлении IEEE 754. Я использовал деление на 2, чтобы проиллюстрировать проблему на очень простом примере.

9
задан Fakrudeen 26 June 2011 в 09:46
поделиться