Форум программистов, компьютерный форум CyberForum.ru

Арифметическая ошибка в цикле - C++

Восстановить пароль Регистрация
 
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
29.05.2013, 01:03     Арифметическая ошибка в цикле #1
C++
1
2
3
4
5
6
for (double i = .01; i <= 1; i+=.01)
{
sum += i;
cout<<i<<endl;
}
cout << "The sum is " << sum;
и результат 49.5, а не 50.5
Но такой код
C++
1
2
3
4
5
6
for (double i = .01; i <= .1; i+=.01)
{
sum += i;
cout<<i<<endl;
}
cout << "The sum is " << sum;
дает значение 0.55
Подскажите пожалуйста в чем причина?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 01:03     Арифметическая ошибка в цикле
Посмотрите здесь:

C++ Ошибка в цикле while
Ошибка в цикле C++
C++ Ошибка в цикле
Ошибка в цикле C++
Ошибка в цикле C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
29.05.2013, 01:17     Арифметическая ошибка в цикле #2
Счетчик double - не самая лучшая идея

C++
1
2
3
4
5
6
for (int i = 1; i <= 100; i+=1)
{
sum += i/100;
cout<<i<<endl;
}
cout << "The sum is " << sum;
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
29.05.2013, 13:17  [ТС]     Арифметическая ошибка в цикле #3
sum: 0.010000, i: 0.0100000000000000
sum: 0.030000, i: 0.0200000000000000
sum: 0.060000, i: 0.0300000000000000
sum: 0.100000, i: 0.0400000000000000
sum: 0.150000, i: 0.0500000000000000
sum: 0.210000, i: 0.0600000000000000
sum: 0.280000, i: 0.0700000000000000
sum: 0.360000, i: 0.0800000000000000
sum: 0.450000, i: 0.0900000000000000
sum: 0.550000, i: 0.1000000000000000
sum: 0.660000, i: 0.1100000000000000
sum: 0.780000, i: 0.1200000000000000
sum: 0.910000, i: 0.1300000000000000
sum: 1.050000, i: 0.1400000000000000
sum: 1.200000, i: 0.1500000000000000
sum: 1.360000, i: 0.1600000000000000
sum: 1.530000, i: 0.1700000000000000
sum: 1.710000, i: 0.1800000000000000
sum: 1.900000, i: 0.1900000000000000
sum: 2.100000, i: 0.2000000000000000
sum: 2.310000, i: 0.2100000000000001
sum: 2.530000, i: 0.2200000000000001
sum: 2.760000, i: 0.2300000000000001
sum: 3.000000, i: 0.2400000000000001
sum: 3.250000, i: 0.2500000000000001
sum: 3.510000, i: 0.2600000000000001
sum: 3.780000, i: 0.2700000000000001
sum: 4.060000, i: 0.2800000000000001
sum: 4.350000, i: 0.2900000000000001
sum: 4.650000, i: 0.3000000000000001
sum: 4.960000, i: 0.3100000000000001
sum: 5.280000, i: 0.3200000000000001
sum: 5.610000, i: 0.3300000000000001
sum: 5.950000, i: 0.3400000000000001
sum: 6.300000, i: 0.3500000000000001
sum: 6.660000, i: 0.3600000000000002
sum: 7.030000, i: 0.3700000000000002
sum: 7.410000, i: 0.3800000000000002

Откуда эти квадритрили...онные берутся?
Причина? Я уверен есть какое-то объяснение.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.05.2013, 13:22     Арифметическая ошибка в цикле #4
Цитата Сообщение от Aliru Посмотреть сообщение
Откуда эти квадритрили...онные берутся?
Причина? Я уверен есть какое-то объяснение.
Ознакомьтесь с IEEE 754.
Yandex
Объявления
29.05.2013, 13:22     Арифметическая ошибка в цикле
Ответ Создать тему
Опции темы

Текущее время: 18:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru