2016-07-04 97 views
0

为了好玩,我试图实现Chudnovsky算法来使用任意精度浮点库来计算java中的pi值。有一件事让我想到,我需要计算1/n的倒数,因为公式被描述为1/pi = sum(...)浮点运算中的倒数的精度

精度的多少个有效数字/需要浮点数n,以使1/n具有所需的精度?有这个简单的答案吗?我试着做一些计算,比如1/0.100009999999 = 9.99900010009,用小数点后五位正确的数字来确定0.1的倒数。我发现如果我在小数点后面取前三位数字,并将结果四舍五入,我会得到正确的值10,但是在1/n操作之后有多少数字是正确的一般规则?我也对同样的结果感兴趣,但是在二进制和十六进制的基础上。

尝试谷歌搜索和快速搜索Stackoverflow,但没有找到任何以前的答案。如果重复存在,道歉。

+1

对于pi(因为它在1到10之间),它应该在一个数字的范围内。所以要获得千位数的精度,您需要高达1001位的倒数精度。你需要确切地知道吗?无论如何,在精确度结束时您会得到估计值,所以在这里或那里一位数字几乎没有问题?我希望你没有使用任何语言的内置double/float值来测试任何内容...... –

+0

谢谢你的输入。对于一个不是pi的数n,一般的答案是什么(因为pi不是基数2中的1到10)?不,我不使用内置的双/浮动。我将使用Java的内置BigDecimal或apfloat – user1661303

回答

1

您想计算1/x,但计算1 /(x + d),其中d = delta x截断误差。由二项式定理,

1/(x+d) = (x-d)/(x²-d²) 

因为我们可以假设D²远远低于任何浮点错误,倒数的错误是-d/X 2和更相关的相对误差为-d/X。

这证实了Artur Biesiadowski的评论,如果1/x在1和10之间,那么在最坏的情况下误差放大倍数是10倍。