My code works to d=50 and fails on the higher values in the test suite. I think it is a hardware-limited rounding error (?swamping) with very large numbers. When I test eps(fibonacci(100)) on my system, the answer is 6.5 ie my system can not accurately distinguish odd from even at that large a number.
Leo, your theory is correct: The numbers that you're calculating for d>50 are too large to be represented by a 32-bit digit, and won't be calculated correctly for mod(x,2). Think very carefully about the number pattern in the Fibonacci sequence, and see if a pattern emerges.
Indeed, My code works until the d = 50 because it's a large number, so our algorithm is correct we should not worry about it, I think we have succeed in this challenge.
Test | Status | Code Input and Output |
---|---|---|
1 | Pass |
d = 14;
y_correct = 4;
assert(isequal(evenFibo(d),y_correct))
y =
4
|
2 | Pass |
d = 20;
y_correct = 6;
assert(isequal(evenFibo(d),y_correct))
y =
6
|
3 | Pass |
d = 50;
y_correct = 16;
assert(isequal(evenFibo(d),y_correct))
y =
16
|
4 | Fail |
d = 100;
y_correct = 33;
assert(isequal(evenFibo(d),y_correct))
y =
48
|
5 | Fail |
d = 150;
y_correct = 50;
assert(isequal(evenFibo(d),y_correct))
y =
98
|
6 | Fail |
d = 200;
y_correct = 66;
assert(isequal(evenFibo(d),y_correct))
y =
148
|
7 | Fail |
d = 500;
y_correct = 166;
assert(isequal(evenFibo(d),y_correct))
y =
448
|
8 | Fail |
d = 1000;
y_correct = 333;
assert(isequal(evenFibo(d),y_correct))
y =
948
|
9 | Fail |
d = 1e4;
y_correct = 3333;
assert(isequal(evenFibo(d),y_correct))
y =
NaN
|
10 | Fail |
d = 2e4;
y_correct = 6666;
assert(isequal(evenFibo(d),y_correct))
y =
NaN
|
11 | Fail |
d = 3e5;
y_correct = 1e5;
assert(isequal(evenFibo(d),y_correct))
y =
NaN
|
12 | Fail |
d = 6e6;
y_correct = 2e6;
assert(isequal(evenFibo(d),y_correct))
%
% %%
% d = 9223372036854775807;
% y_correct = 3074457345618258432;
% assert(isequal(evenFibo(d),y_correct))
y =
NaN
|
Find the longest sequence of 1's in a binary sequence.
3369 Solvers
Back to basics 6 - Column Vector
908 Solvers
367 Solvers
1172 Solvers
Find my daddy long leg (No 's')
632 Solvers
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!