Math.ceil (x), использующий цикл while - PullRequest
0 голосов
/ 08 ноября 2019

В прошлый раз я изучал математический модуль и не могу понять, как работает math.ceil (). Я пытался использовать его с циклом while, но я не знаю, насколько точно он работает. Вот мой маленький код:

import math

x = 20.4
y = 20.4

x = math.ceil(x)

while y != x:
    y += 0.1
    print(y)

Это просто не может прекратить вычислять, почему это так? Он даже печатает номера, например 20152.599999987233 или выше.

1 Ответ

1 голос
/ 08 ноября 2019

Python имеет проблем со сравнением двух чисел с плавающей запятой из-за проблем с точностью / округлением. Python фактически оценивает y до ближайшего приближения 21,0, когда вы ожидаете, что оно равняется 21. Из-за этого они не равны, а условие y != x никогда не оценивается как False, вызывая бесконечный цикл, в котором вы находитесь.

Вы можете использовать функцию math.isclose вместо равенства, чтобы решить проблему:

import math

x = math.ceil(20.4)
y = 20.4

while not math.isclose(x,y):
    y += 0.1
    print(y)

Теперь ваш цикл должен завершиться, когда y "близко к" 21- это был мой вывод:

20.5
20.6
20.700000000000003
20.800000000000004
20.900000000000006
21.000000000000007
...