Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

с++ непонятно работает цикл for

Dimonыч Гуру (2944), на голосовании 9 лет назад
Почему в цикле вместо нуля выводится непонятное число?
for(double x=-1; x<=1; x+=0.1) {
cout << x << endl;
}
Дополнен 9 лет назад
Выводится
...
-0.1
-1.38778е-016
0.1
...
Дополнен 9 лет назад
Как тогда сделать цикл, чтобы 0 считался правильно?
Голосование за лучший ответ
Ирина В Просветленный (49017) 9 лет назад
Смотря какое? Если просто очень маленькое, то значит набежала погрешность.
DimonычГуру (2944) 9 лет назад
А как миновать этого? Чтобы не было погрешности?
Ирина В Просветленный (49017) Можно округлять, например в Вашем случае, до 0.1, или можно сделать цикл в целых, а из них получать double for(int n=-10; nx<10; nx++){ x=i/10; .... } Зависит от задачи, но я бы делала в целых.
San4az Мыслитель (9491) 9 лет назад
НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ тип с плавающей запятой в сравнениях, в точных расчётах и как счётчик циклов!! !

этот тип не представлен с абсолютной точностью, поэтому то что вы допустим задали для x = .0001
и сравните это же значение которое получилось в результате расчётов, 90% что они не будут равны, хотя как бы 0.001 = 0.001
ltester ltester Мудрец (18128) 9 лет назад
Из-за несовершенства математического сопроцессора и системы представления в нем вещественных чисел с плавающей арифметикой. Если нужен 0, - округляйте.
А цикл работает как должно.
Похожие вопросы