是否可以在不使用十进制输入的情况下计算到小数点后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"
首先要提到的是
sqrt
函数不返回任何值。因此,没有人返回。只要加一行就行了到函数定义的末尾,最好也删除第
print(x)
行,使函数返回值,而不是打印它但问题更深。首先,请注意,python 3(内置)中的
float
长度仅为点后约16位小数。所以我们无法更精确地计算。有一些模块可以让你做到这一点:numpy支持float128(大约32位十进制数字),如果这还不够的话,看看decimal或mpmath。两者都有很好的文档记录,支持更高的精度。没有内置的方法一篇关于python中的高精度计算以及需要它们的原因的文章: https://habr.com/ru/post/305276/
相关问题 更多 >
编程相关推荐