【发布时间】:2021-01-21 09:43:45
【问题描述】:
是否可以在不使用小数导入的情况下计算到小数点后 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"
【问题讨论】:
-
导入数学或小数有什么问题?
-
没什么。它们都运行良好,但我想知道是否可以在不使用它的情况下打印出 50 个小数位,因为默认输出要短得多。另一种说法是,我可以修改默认值以使其随心所欲。我尝试了格式化功能,但它似乎不起作用。
-
你的
squareRoot函数没有返回任何东西,所以s是None,这会导致format引发错误。 -
请将您的问题更新为您真正想知道的内容。
-
双精度数具有 53 位(16 位)的精度,这就是 Python normal floating-point uses。因此,仅使用普通的 Python 浮点数(即需要 Decimal 或其他一些库)无法获得 50 位的准确度。
标签: python square-root