Matt Owen

source code for "files/pe/pe_025.pl"

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  use strict;
  4.  use warnings;
  5.  use bignum;
  6.  
  7.  sub round {
  8.   my $n = shift;
  9.   return int $n + .5 * ($n <=> 0);
  10.  }
  11.  
  12.  sub fib
  13.  {
  14.   my $n = shift;
  15.   my ($c1, $c2) = ((5+sqrt(5))/10, (-1+sqrt(5))/(2*sqrt(5)));
  16.   my ($fi1,$fi2) = ((1+sqrt(5))/2, (1-sqrt(5))/2);
  17.   return round($c1*$fi1**$n+$c2*$fi2**$n,1);
  18.  }
  19.  
  20.  my ($last, $f, $k);
  21.  
  22.  $last = $f = 1;
  23.  
  24.  for ($k=2; length $f != 1000; $k++) {
  25.   ($last, $f) = ($f, $f+$last);
  26.  }
  27.  
  28.  print $k;