是否可以在不使用小数导入的情况下计算到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"
发布于 2020-10-06 21:55:50
首先需要注意的是,sqrt函数不返回任何值。因此不会返回任何内容。只需添加这一行
return(x)在函数定义的末尾,最好也去掉print(x)行,让你的函数返回值而不是打印它。
但问题更深层次。首先,提到,Python3(内置)中float长度只有大约。点后16位十进制数字。所以我们不能计算得更精确。有一些模块可以让你做到这一点: numpy支持float128 (约.32个十进制数字),如果这还不够,可以看看decimal或mpmath。两者都有很好的文档记录,并支持更高的精度。没有内置的方法。
一篇关于python中的高精度计算的文章以及为什么需要它们的原因:https://habr.com/ru/post/305276/
https://stackoverflow.com/questions/64227023
复制相似问题