Fibonacci序列(JS) - 偶数之和

jay*_*e32 6 javascript fibonacci

我创办了Project Euler.我遇到了问题2并提出了这个代码来得出甚至斐波那契数字达到400万的总和.代码似乎完全符合我的要求.我确实看到代码运行时列出了​​正确的总和.我真正感到困惑的唯一部分是结果中显示的最后一个数字.这就是它所显示的:

JS代码:

var previous = 0;
var current = 1;
var sum = 0;
var next;

   for(i = 1; i < 100; i++){
        next = current + previous;
        previous = current;
        current = next; 
        if(current % 2 === 0 && current < 4000000) {
            sum += current;
        console.log(sum);
        }
   }
Run Code Online (Sandbox Code Playgroud)

结果:

2
10
44
188
798
3382
14328
60696
257114
1089154
4613732 (this is the number i was trying to get)
=> 354224848179262000000 (confused as to why this number shows up and what it represents)
Run Code Online (Sandbox Code Playgroud)

小智 6

让我打破这个:

为什么会出现这种情况?

在控制台上,您将看到执行的任何表达式的结果.如果执行一段代码,您将看到在块中执行的最后一个表达式.直观地说,在这种情况下,它是current = next因为if语句不是你最后一次通过for循环运行的结果.

为什么下一个等于354224848179262000000?

第百个斐波纳契数是354224848179261915075.然而,当您的数字超过某个点并开始假设您的数字的所有较低部分为零时,JavaScript会失去精确度.有关移动详细信息,请参阅此问题:为什么JavaScript认为354224848179262000000和354224848179261915075相等?.