2017-06-08 13 views
-2

私は、小数点以下50桁までのオイラーの数値を私に与えるBigDecimalを使ってみました。しかし、制約値がこの値より大きいので、数値は1から10^6000の範囲になる可能性があります。したがって、精度を得ることはできません(別の問題として最適化する)。には、オイラーの数と整数の積の和を求める方法はありますか?整数は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

「合計」とは何ですか? BigDecimalも同様に作成する必要があります。 – lucasvw

+2

コードスニペットは、10^6000の数字を合計したいと示唆しています。それに幸いです。 – Henry

+0

私は最初に '(n *(n + 1)/ 2) 'という式を使ってbd * once *を乗じて切り捨てることを提案したいと考えましたが、フロアを追加する必要はないしたがって、1 * eは2になり、2 * eは5になり、小計の合計は7になります。一方、3 * eは8になり、すでに1の誤差が与えられます。あなたはループする必要があります、私は恐れています。 –

答えて

0

私はあなたがより高い精度に(すなわちe)オイラー数を計算する方法を求めていると思う:ここでは、コードのブロックです。

答えは迅速に収束するアルゴリズムを実装することです。少しの研究で、このページは"Calculating the Value of e"にあります。一番下には、兄弟の公式が記載されています。

非常に急速に収束します。 BigDecimalを使ってJavaでコードをコーディングすることで、必要な任意の桁数の精度を計算できます。

も参照してください:

(私が正しく理解していれば!)より迅速に収束するより複雑な式が得られます。

+0

あなたは正しく理解しています。 pdfへのリンクは非常に貴重です、ありがとう。私はそれのようなものを探していました。その件に関してあまり多くはありません。 –

関連する問題