2017-06-08 57 views
-2

所以我尝试使用BigDecimal,它给我的欧拉数值最多为50个小数点。但是由于约束值很高,数字可以从1到10^6000,因此我没有得到任何精度(使其最优化是另一个问题)。这里是代码块:我想你问如何计算欧拉数(即e)以更高的精度有什么办法可以得到欧拉数和整数的乘积之和,整数的范围可以达到10^6000?

for(int i=1; i<n+1; i++){ 
// i is the integer value and bd is the value of the euler's number, so below i am multiplying the value of i with the euler's number 
BigDecimal x = BigDecimal.valueOf(i).multiply(bd); 
//Here i am taking floor of the above calculated value 
x.setScale(0, RoundingMode.HALF_UP); 
//and here sum is floor[1*euler's no] + floor[2*euler's number] + ... + floor[n*euler's number] 
sum += x.intValue(); 
} 
+1

什么是'sum'?您可能还需要制作一个BigDecimal。 – lucasvw

+2

代码片断表明您想总结10^6000个数字:祝您好运。 – Henry

+0

我首先想建议使用公式'(n *(n + 1)/ 2)',并将其与bd *乘以一次*,然后截断,但是这并没有考虑到您需要添加地板值,所以1 * e会变成2,2 * e变成5,给出7的小计等,而3 * e变成8,给出1的误差。恐怕你必须循环。 –

回答

0

答案是实现一个快速收敛的算法。通过一点研究,我在"Calculating the Value of e"上找到了这个页面。在底部,它描述了兄弟公式:

e =​ Sum(n=0, n=​∞​​​, (2n+2)​​/(2n+1)!​​) 

其收敛非常迅速。您可以使用BigDecimal在Java中对其进行编码,以计算出您需要的任意位数精度。

参见:

哪(如果我理解正确!)给出更复杂的公式,收敛速度更快。

+0

你理解正确。链接到PDF是非常有价值的,谢谢。我一直在寻找类似的东西,关于这个问题并没有太多(或者至少没有太多我可以阅读和遵循)。 –

相关问题