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

2024-09-24 22:31:32 发布

您现在位置: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"


Tags: format内容def情况数学numdecimalprint
1条回答
网友
1楼 · 发布于 2024-09-24 22:31:32

首先要提到的是sqrt函数不返回任何值。因此,没有人返回。只要加一行就行了

return(x)

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

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

一篇关于python中的高精度计算以及需要它们的原因的文章: https://habr.com/ru/post/305276/

相关问题 更多 >