gpt4 book ai didi

java - 欧拉计划问题 2 : sum of even Fibonacci numbers

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:35 24 4
gpt4 key购买 nike

我正在尝试解决 Project Euler problem 2在 Java 中:

public class Euler2 {

public static long GenerateFibonacci(int term) {

long sum = 0;
long fib = 0;
long f1 = 0;
long f2 = 1;
if (term <=1) return term;
for (int i = 1; i <= term; i++) {
fib = f1 + f2;
f1 = f2;
f2 = fib;
if(fib %2 ==0)
sum += fib;
}
return sum;

}

/**
* @param args
*/
public static void main(String[] args) {

int n = 100;
long result = GenerateFibonacci(n);
System.out.println("The sum of the even Fibonacci numbers is: "+result);
}
}

n 较小时,我会得到正确的答案,但对于更大的值,我会得到错误的结果。这里有什么问题?

最佳答案

int 限于 32 位精度,long 为 64 位。

当您通过添加结果大于位限制的数字超过限制时,它们会“翻转”并且您会丢失加法结果中的最高有效位 - 本质上,它们被“四舍五入”为 32/64位。

这里有一个滚动的例子:

int i = Integer.MAX_VALUE; // 2147483647
i++; // -2147483648

粗略地说,每个斐波那契数都是前一个的两倍,因此粗略地说,您只能使用 long 作为总数来处理 64 次迭代的顺序。

关于java - 欧拉计划问题 2 : sum of even Fibonacci numbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com