Показать сообщение отдельно
Старый 24.12.2001, 21:03
Barmaglot вне форума Посмотреть профиль Отправить личное сообщение для Barmaglot Найти все сообщения от Barmaglot
  № 9  
Barmaglot
 
Аватар для Barmaglot

Регистрация: Aug 2001
Адрес: Moscow
Сообщений: 213
Отправить сообщение для Barmaglot с помощью ICQ
В первом случае
компьютер сначала делит 0.2 на 1.2, а потом умножает ее на Cумму, во втором сначала умножает Сумму на 0.2, а затем результат делит на 1.2. Если вычислять разными путями, то ошибки округленя будут разными.

Вот вам примерчик:

e=1e-20;
c=1;
c+=e; // с останется равной 1, т.к. 1.00000000000000000001
находится за пределами точности (обычно для дробных чисел используются числа double, а это - 15-16 значащих цифр).
d=e/(c-1); // Получится INF, а должно 1

Если вы работаете с числами с плавающей точкой, то не мешает знать все эти тонкости, чтоб не напороться на грабли.
Это не ошибка - это принципиальная особенность работы компьютера с дробными числами.