皆さん、皆さん、私が逃しているものを指摘してくれることを願っています。私はプログラミングに慣れていないので、プロジェクトオイラーの問題を解決しています。タスクの1つは、フィボナッチシーケンスの偶数の合計を計算することです。私は5つのテストのうち4つをパスしたコードを書いた。ここにあります:大きなフィボナッチ数の丸め
//N is input (N<=4*10^16), let's find n by Binet's formula
double a = log10(sqrt (5) * N);
double b = log10((1 + sqrt (5))/2);
int n = (int) (a/b);
//Using same formula, we find every Fibonacci number till n
for (int i = 1; i <= n; i++){
a = (1 + sqrt(5))/2;
long fiboNum = Math.round (Math.pow(a,i)/sqrt(5));
これは私の問題です。大きな数字のテストを実行すると、F(71)の周りに何らかの丸めが発生します。 私のコードでは、WolphramAlpha計算によるF(71)は308 061 521 170 130です。308 061 521 170 129.
このため、最終的な合計が間違っています。
また、私はすべての数字を印刷し、偶数が3を繰り返していることを認識します。しかし、それを3番目ごとに小さいループに単純化しても、問題は残っています。私は恐らくMath.roundを使用しない場合
、私は間違ったシーケンスを取得しています...
2の53乗の後に、整数のために「double」がオフになります。 – Bathsheba