Python 平方根到小数点后50位,无需导入小数或数学函数

Python 平方根到小数点后50位,无需导入小数或数学函数,python,square-root,Python,Square Root,是否可以在不使用十进制输入的情况下计算到小数点后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)

是否可以在不使用十进制输入的情况下计算到小数点后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)

但是收到了错误消息“不支持的格式字符串传递给了NoneType”

您应该提到的第一件事是您的
sqrt
函数没有返回任何值。因此,没有人返回。只要加一行就行了

return(x)
在函数定义的末尾,最好也删除行
print(x)
,使函数返回值,而不是打印它

但问题更深。首先,请注意,Python3(内置)中的
float
长度仅为点后约16位小数。所以我们无法更精确地计算。有一些模块可以让你做到这一点:numpy支持float128(大约32位十进制数字),如果这还不够的话,看看decimal或mpmath。两者都有很好的文档记录,支持更高的精度。没有内置的方法

一篇关于python中的高精度计算以及需要它们的原因的文章:

导入数学或十进制有什么问题?没有问题。它们都工作得很好,但我想知道是否有可能打印出50个小数位而不使用它,因为默认输出要短得多。另一种说法是,我是否可以修改默认值,使其尽可能长。我尝试了format函数,但它似乎不起作用。您的
平方根
函数不返回任何内容,因此
s
,这会导致
格式
出现错误。请更新您的问题,了解您真正想知道的内容。双精度数字有53位(16位)精确性,这就是Python。因此,仅使用普通的Python浮点值(即需要十进制或其他库)无法获得50位精度。