GOOGLE ADS

пятница, 15 апреля 2022 г.

Я пытаюсь приблизить квадратный корень из 2 в python

вот код, который я написал. моя идея заключается в том, чтобы поставить число (от 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

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...