вот код, который я написал. моя идея заключается в том, чтобы поставить число (от 0 до 9) в конце x и возвести его в квадрат, а затем посмотреть, меньше ли оно 2, выбрав самое большое
x = 1.4
for n in range(21):
next_num = [0,1,2,3,4,5,6,7,8,9]
candidate = []
for number in next_num:
if float(str(x)+str(number))*float(str(x)+str(number))<2:
candidate.append(number)
x = float(str(x)+str(max(candidate)))
print(x)
но проблема в том, что я получаю только 1.414213562373 столько 13 цифр, я пытался ввести большее число в диапазоне, но я получаю только это
благодарю вас
Решение проблемы
floats не имеют достаточной точности для этого. Вам нужен decimalмодуль:
from decimal import Decimal, getcontext
getcontext().prec = 51 # the "1" before the decimal point counts, too
x = Decimal("1.4")
for n in range(50):
next_num = [0,1,2,3,4,5,6,7,8,9]
candidate = 0
for number in next_num:
if Decimal(str(x)+str(number))*Decimal(str(x)+str(number))<2:
candidate = number
x = Decimal(str(x)+str(candidate))
print(x)
Выход:
1.414213562373095048801688724209698078569671875376946
Комментариев нет:
Отправить комментарий