提高Python中的浮点精度

时间:2014-01-12 19:33:37

标签: python floating-point floating-point-precision

我正在开发一个项目,用以下代码计算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是否支持更精确的浮点,还是必须使用一些外部库?

4 个答案:

答案 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位数的精度(如果你看到更少,你可能需要在打印时使用不同的格式说明符)。

如果您需要更多,则需要使用不同的方法(仅使用整数运算的方法)或表示浮点数的不同方法。

请参阅Python floating point arbitrary precision available?

答案 2 :(得分:3)

尝试使用Decimal

阅读Arbitrary-precision elementary mathematical functions (Python) original 了解更多信息

答案 3 :(得分:3)

Leibniz公式非常缓慢地收敛 - 老实说,你不会活得足够长,因为它可以获得12位精度。 Click here以一种方式加速它。