我想在低内存环境中计算Pi的第n位数.因为我没有可用的小数,所以Python中这个仅整数的BBP算法是一个很好的起点.我只需要一次计算一位Pi.如何确定我可以设置的最低值D,即"工作精度的位数"?
D = 4给了我许多正确的数字,但是一些数字会被一个数字关闭.例如,计算精度为4的数字393给出了0xafda,我从中提取数字0xa.但是,正确的数字是0xb.
无论我设置多高D,似乎测试足够数量的数字会找到公式返回不正确值的数字.
当数字"接近"另一个时,我已经尝试提高精度,例如0x3fff或0x1000,但是找不到任何好的"关闭"定义; 例如,在数字计算9798给我0X Ç DE6,这是不是很接近0xd000,但正确的数字是0xd中.
任何人都可以帮我弄清楚使用这种算法计算给定数字需要多少工作精度?
谢谢,
编辑
供参考:
precision (D) first wrong digit ------------- ------------------ 3 27 4 161 5 733 6 4329 7 21139 8+ ???
请注意,我一次计算一位数,例如:
for i in range(1,n):
D = 3 # or whatever precision I'm testing
digit = pi(i) # extracts most significant digit from integer-only BBP result
if( digit != HARDCODED_PI[i] ):
print("non matching digit #%d, got %x instead of %x" % …
Run Code Online (Sandbox Code Playgroud)