/* * Fibonacci numbers: F[n] = F[n-1] + F[n-2], F[0] = 0, F[1] = 1 * * Analytic expression: F[n] = (phi^n - psi^n)/(phi - psi), * phi = (1 + sqrt(5))/2, psi = 1 - phi */ #include #include int main() { long i = 1L, j = 0L, k; /* k <--> F[n], i <--> F[n-1], j <--> F[n-2] */ int n; double phi, psi, phi_p, psi_p, d, f; phi = 0.5*(1 + sqrt(5.)); psi = 1. - phi; d = 1./(phi - psi); /* 1./sqrt(5.) */ printf("%2d %15ld %42.16f\n", 0, j, 0.); printf("%2d %15ld %42.16f\n", 1, i, 1.); phi_p = phi; psi_p = psi; for (n = 2; n < 70; n++){ k = i + j; phi_p *= phi; psi_p *= psi; f = d*(phi_p - psi_p); /* F[n] */ printf("%2d %15ld %42.16f\n", n, k, f); j = i; i = k; } return(0); }