В книге, которую я сейчас читаю, есть этот отрывок:
Вы также можете использовать числа с плавающей запятой значение как счетчик цикла. Вот пример цикла
for
с таким типом счетчика:дубль a (0,3), b (2,5); для (двойной 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
. Таким образом, второй контур управления выражение всегда ложно, и цикл продолжается бесконечно.
Кто-нибудь может объяснить, как первый блок кода работает, а второй - нет?