#python #square-root
#python #квадратный корень
Вопрос:
Можно ли вычислить до 50 знаков после запятой без использования десятичного импорта? Ниже напечатано то, что я хочу, но я хотел бы знать, как это сделать без какого-либо математического или десятичного импорта.
def sqrt2(num, P):
decimal.getcontext().prec = P len(str(num)) 2
x = decimal.Decimal(num)
y = decimal.Decimal(1)
e = decimal.Decimal(10) ** decimal.Decimal(-P)
while (x - y >= e):
x = (x y) / 2
y = num / x
print (sqrt2(2, 50))
Я также пытался:
x=n
y=1.000000
e=0.000001
while x-y > e:
x=(x y)/2
y=n/x
print (x)
n = 2
squareRoot(n)
s = squareRoot(n)
a = format(s, ".2f")
print (s)
Но получил сообщение об ошибке "unsupported format string passed to NoneType"
Комментарии:
1. Что не так с импортом математической или десятичной функции?
2. Ничего. Они оба работают хорошо, но я хотел выяснить, можно ли распечатать 50 знаков после запятой, не используя его, поскольку вывод по умолчанию намного короче. Другой способ выразить это, могу ли я изменить значение по умолчанию, чтобы сделать его таким длинным, как я хочу. Я попробовал функцию форматирования, но, похоже, она не сработала.
3. Ваша
squareRoot
функция ничего не возвращает, sos
isNone
, что приводитformat
к возникновению ошибки.4. Пожалуйста, обновите свой вопрос относительно того, что вы на самом деле хотите знать.
5. Числа с двойной точностью имеют 53 бита (16 цифр) точности, которые использует обычный Python с плавающей запятой . Таким образом, вы не можете получить 50 цифр точности только с обычными плавающими числами Python (т. Е. Нужна десятичная или какая-либо другая библиотека).
Ответ №1:
Первое, что вы должны упомянуть, это то, что ваша sqrt
функция не возвращает никакого значения. Таким образом, ничего не возвращается. Просто добавьте строку
return(x)
до конца определения функции и лучше удалите строку print(x)
, чтобы ваша функция возвращала значение вместо его печати.
Но вопрос глубже. Прежде всего, обратите внимание, что float
длина в python 3 (встроенная) составляет всего ок. 16 десятичных цифр после точки. Таким образом, мы не можем вычислить более точно. Существуют модули, которые могут позволить вам это сделать: numpy поддерживает float128 (прибл. 32 десятичных знака), если этого недостаточно — посмотрите на Decimal или mpmath . Оба хорошо документированы и поддерживают более высокую точность. Встроенного метода нет.
Статья о высокоточных вычислениях в python и причинах, по которым они требуются: https://habr.com/ru/post/305276 /