-3
def generator(x):
    while True:
        yield x ** (1 / 3)
        x = x ** (1 / 3)


gen = generator(19683)
for i in range(10):
    print(next(gen))

вывод 26.999999999999996, а должно быть: 27.0, 3.0, ... Как исправить код

1 Answers1

0

Это вопрос представления. float в питоне имеет ограниченную точность, поэтому точных значений при вычислении может не быть. Но вы можете получить нужные значения при выводе. Ограничьте число выводимых знаков после запятой, например до 5 знаков, и будет вам 27.0 и 3.0:

for i in range(10):
    print(f'{next(gen):.5}')

Вывод:

27.0
3.0
1.4422
1.1298
1.0415
1.0137
1.0045
1.0015
1.0005
1.0002
CrazyElf
  • 71,194