В книге, которую я сейчас читаю, есть этот отрывок:
Вы также можете использовать плавающую точку значение как счетчик циклов. Здесь пример цикла
for
с таким типом счетчика:double a(0.3), b(2.5); for(double x = 0.0; x <= 2.0; x += 0.25) cout << "\n\tx = " << x << "\ta*x + b = " << a*x + b;
Этот фрагмент кода вычисляет значение
a*x+b
для значенийx
от0.0
до2.0
, с шагом0.25
; однако вам необходимо позаботиться при использовании счетчика с плавающей запятой в петля. Многие десятичные значения не могут быть представленный точно в двоичном с плавающей точкой, поэтому расхождения может нарастать с совокупными значениями. Это означает, что вы не должны для цикла, чтобы конец цикла зависит от цикла с плавающей точкой счетчик достигает точной величины. Для Например, следующие плохо разработанные цикл никогда не заканчивается:for(double x = 0.0 ; x != 1.0 ; x += 0.2) cout << x;
Целью этого цикла является выведите значение
x
, поскольку оно изменяется от0.0
до1.0
; однако0.2
не имеет точного представления как двоичное значение с плавающей запятой, поэтому значениеx
никогда не будет точно1
. Таким образом, второе управление контуром выражение всегда ложно, а цикл продолжается бесконечно.
Может кто-нибудь объяснить, как работает первый блок кода, а второй - нет?