Python:Float无限长度(精确浮点数)

时间:2015-07-04 20:43:43

标签: python floating-point-precision pi

我的代码:

//Initialization:

void init(int node,int b,int e)
{
    if(b==e)
    {
        tree[node]=arr[b];
        return;
    }
    int Left=node*2;
    int Right=node*2+1;
    int mid=(b+e)/2;
    init(Left,b,mid);
    init(Right,mid+1,e);
    tree[node]=tree[Left]+tree[Right];
}

当然,我正在尝试计算一个超过10个后点数的pi。但是Python似乎要回到10.有一种简单的方法可以阻止它这样做吗?像一百万个后点数字?

谢谢!

3 个答案:

答案 0 :(得分:8)

您可以使用标准库提供的Decimal类。

来自文档:

  

与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为28个位置),可以与给定问题所需的一样大:

  >>> from decimal import *
  >>> getcontext().prec = 6
  >>> Decimal(1) / Decimal(7)
  Decimal('0.142857')
  >>> getcontext().prec = 28
  >>> Decimal(1) / Decimal(7)
  Decimal('0.1428571428571428571428571429')

答案 1 :(得分:2)

Python的内置浮点通常是64位IEEE754浮点数(通常称为“双”)。

你想要的不是浮点表示,而是(二进制)数字中可扩展的东西,就像python的整数类型可以任意增长一样。

因此,我恳请您查看小数整数表示,并使用数学来表示您的数字。

答案 2 :(得分:2)

您可以使用Chudnovsky algorithm计算100,000的小数位数π。另请参阅相关问题1000-digits-of-pi-in-pythonpython-pi-calculation

如果您不想实施自己的算法,可以使用mpmath包。对于Chudnovsky系列,小数点后大约1000000个数字:

from mpmath import mp
mp.dps = 1000000  # number of digits
print(mp.pi)   # calculate pi to a million digits (takes ~10 seconds)