codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
/// Calculate F(N+1) from F(N) where /// F(N) is Nth Fibonacci number /// N > 10 #include <iostream> #include <iomanip> #include <cmath> using namespace std; /** * @brief Calculate next Fibonacci number in series from * previous Fibonacci. * * @param [in] lastFibonacci F(N) for N > 10 * @ret F(N+1) * * int_type should be integral type and not real. * If int_type is some big number type, it should provide * initialization from type double. */ template<typename int_type> int_type findNextFibonacci(int_type lastFibonacci) { const double goldenRatio = 0.5 * sqrt(5.0) + 0.5; // FIXME: Change type to something more precise return static_cast<int_type>(0.5 + goldenRatio * lastFibonacci); } static void testFindNextFibonacciFunctionFor(int number, int expected) { const int actual = findNextFibonacci(number); int len = 10; if(actual != expected) { cout << " *** ERROR *** "; len = 5; } cout << "Input = " << setw(len) << number << ", Expected = " << setw(len) << expected << ", Actual = " << setw(len) << actual << endl; } int main() { const int fibsize = 47; int fibs[fibsize] = {0, 1}; for(int i = 2; i < fibsize; ++i) { fibs[i] = fibs[i-1] + fibs[i-2]; } for(int i = 1; i < fibsize; ++i) { testFindNextFibonacciFunctionFor(fibs[i-1], fibs[i]); } // Let's test whether it works for Lucas numbers or not cout << endl; fibs[0] = 2; fibs[1] = 1; for(int i = 2; i < fibsize-2; ++i) { fibs[i] = fibs[i-1] + fibs[i-2]; } for(int i = 1; i < fibsize-2; ++i) { testFindNextFibonacciFunctionFor(fibs[i-1], fibs[i]); } return 0; }
Private
[
?
]
Run code
Submit