我正在开发一个项目,用以下代码计算pi的Leibniz近似值:
def pi(precision):
sign = True
ret = 0
for i in range(1,precision+1):
odd = 2 * i - 1
if sign:
ret += 1.0 / odd
else:
ret -= 1.0 / odd
sign = not sign
return ret
但是,输出值始终为12位数。如何提高计算的精度(例如更多位数)? Python是否支持更精确的浮点,还是必须使用一些外部库?
答案 0 :(得分:5)
Python的float
类型映射到平台的C编译器调用double
的任何内容(参见http://en.wikipedia.org/wiki/IEEE_floating_point_number)。
Python标准库还附带一个名为decimal
的任意精度十进制模块:http://docs.python.org/2/library/decimal.html
答案 1 :(得分:3)
使用Python的浮点数,你可以获得15-17位数的精度(如果你看到更少,你可能需要在打印时使用不同的格式说明符)。
如果您需要更多,则需要使用不同的方法(仅使用整数运算的方法)或表示浮点数的不同方法。
答案 2 :(得分:3)
尝试使用Decimal
。
阅读Arbitrary-precision elementary mathematical functions (Python) original 了解更多信息
答案 3 :(得分:3)
Leibniz公式非常缓慢地收敛 - 老实说,你不会活得足够长,因为它可以获得12位精度。 Click here以一种方式加速它。