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