我的代码:
//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.有一种简单的方法可以阻止它这样做吗?像一百万个后点数字?
谢谢!
答案 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-python和python-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)