我期待在低内存环境下计算Pi的第 n。由于我没有小数点,所以这个integer-only BBP algorithm in Python是一个很好的起点。我只需要一次计算Pi的一个数字。 如何确定最低可以设置的D,“工作精度的位数”?BBP算法所需的工作精度?
D = 4给了我很多正确的数字,但几个数字将会被删除一个。例如,计算数字393的精度为4给了我0xafda,从中提取数字0xa。但是,正确的数字是0xb。
无论我设置D有多高,似乎测试足够数量的数字都会找到一个公式返回错误值的位置。
我已经尝试提高精度,当数字“关闭”到另一个,例如0x3fff或0x1000,但找不到任何“关闭”的良好定义;例如,计算数字9798给我0x c 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" % (i,digit,HARDCODED_PI[i]))
尽管我正在测试很多数字,但我一次只计算一位数字。你是说没有办法知道在给定的位置获得一个正确的数字需要多少精度? – tba 2010-05-30 19:39:36
@brainfsck:你当然可以对你已经拥有的数据使用**外推**,但这可能并不容易。 – ANeves 2010-05-31 10:43:33
我只是在研究这个问题,看看我能否解释舍入错误发生的位置。但请注意,您使用的脚本并不打算产生顺序数字 - 它从0..n循环 - 因此计算第n位数字需要的时间与n成比例,这远非理想。维基百科页面还有一个真正的spigot算法,用于逐一生成数字 - 您可以使用它吗? – mdma 2010-06-02 20:51:31