I started Project Euler. I am on problem 2 and came up with this code to come up with the sum of even fibonacci numbers up to 4 million. The code seems to do pretty much what I want it to. I do see the correct sum listed when the code is ran. The only part I am really confused about is the very last number displayed in the results. This is what it shows:
JS CODE:
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);
}
}
RESULTS:
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)
Let me break this down:
On the console, you will see the result of any expression you execute. If you execute a block of code you will see the last expression you executed in the block. Counter intuitively, in this case it is the result of current = next
because the if statement is not run on your last time through the for loop.
The hundredth Fibonacci number is 354224848179261915075. JavaScript however loses precision as your numbers get past a certain point and starts assuming that all of the lower part of your number is zeros. See this question for move details: Why does JavaScript think 354224848179262000000 and 354224848179261915075 are equal?.
You can use this code to fix your problem, with this the algorithm don't need to go through 100 iterations to reach your answer (Is a modification of yours, the difference is in the for loop, when you use the current variable for the iteration):
function sumFibs(num) {
let previous = 0;
let current = 1;
let sum = 0;
let next;
for(current; current <= num;){
next = current + previous;
previous = current;
if(current % 2 === 0) {
sum += current;
}
current = next;
}
return sum;
}
sumFibs(4000000); // return 4613732
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With