home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / LANGUAGS / MODULA2 / FIBONACC.MOD < prev    next >
Text File  |  2000-06-30  |  797b  |  31 lines

  1. (* Compute the Fibonacci numbers F(1) ... F(N) in two diff. ways:
  2.      1. By repeated addition according to F(n) = F(n-1) + F(n-2),
  3.           F(0) = F(1) = 1.
  4.      2. Using the formula F(n) ~ (phi^n)/sqrt(5),
  5.           where phi = (1+sqrt(5))/2.
  6.    Terminate as soon as the two results differ
  7.    (or before it overflows). *)
  8.  
  9. MODULE fibonacci;
  10. FROM InOut IMPORT WriteCard, WriteLn;
  11.  
  12. CONST root5 = 2.236068;
  13.  
  14. VAR i,fib0,fib1,fib3,t: CARDINAL;
  15.     phi,fib2: REAL;
  16.  
  17. BEGIN
  18.   phi := (1.0 + root5)/2.0;
  19.   i := 0; fib0 := 1;
  20.   fib1 := 0; fib2 := 1.0/root5;
  21.   REPEAT
  22.     INC(i);
  23.     t := fib0 + fib1;
  24.     fib0 := fib1; fib1 := t;
  25.     fib2 := fib2 * phi;
  26.     fib3 := TRUNC(fib2 + 0.5);
  27.     WriteCard(i,6); WriteCard(fib1,6);
  28.     WriteCard(fib3,6); WriteLn;
  29.   UNTIL i >= 24;  (*fib1 # fib3*)
  30. END fibonacci.
  31.