Следующий код Python вычисляет количество итераций для выполнения каких-либо действий на основе некоторых переменных.
# a - b - c is always a multiple of d.
i = (a - b - c) / d
while i:
# do stuff
i -= 1
Все переменные будут одного типа, то есть только ints
или float
или что-то еще. Меня беспокоит, будет ли он работать правильно, если значения равны float
. Я знаю достаточно, чтобы всегда учитывать подводные камни, полагаясь на точные значения с плавающей запятой. Но я не могу сказать, опасно это или нет. Я могу использовать i = int (round ((a - b - c) / d))
, но мне любопытно лучше понять числа с плавающей запятой.
Все сводится к следующему: a - b - c
является точным кратным d
. Поэтому я полагаюсь на (abc) / d
, чтобы стать значением i
, из которого я могу вычесть 1
и получить ожидаемое количество итераций в цикле while. , с подразумеваемым предположением, что i == 0
становится истинным. То есть, можно ли уменьшать такие вычисленные кратные на 1, чтобы достичь ровно 0?
Я хотел бы не только знать, небезопасно ли это, но, что более важно, что мне нужно понимать о плавающей запятой, чтобы решить такой вопрос, как это? Если кто-то точно знает, безопасно это или нет, можно ли объяснить, как так?