PERL   29

pi

Guest on 24th August 2022 04:41:25 AM

  1. use Math::BigFloat qw(:constant);
  2.  
  3. $|++;
  4.  
  5. #&calc_pi(20);
  6. #&calc_pi(25);
  7. &calc_pi(30);
  8.  
  9. sub ataninvint {
  10.         my ($x, $iter) = @_;
  11.  
  12.         my $Result = Math::BigFloat->bone();
  13.         $Result->bdiv($x);
  14.  
  15.         my $XSquared = $x * $x;
  16.  
  17.         my $Divisor = 1;
  18.         my $Term = Math::BigFloat->new();
  19.         $Term->badd($Result);
  20.         my $TempTerm = Math::BigFloat->new();
  21.  
  22.         for(1..$iter){
  23.  
  24.                 print '.';
  25.  
  26.                 $Divisor += 2;
  27.                 $Term->bdiv($XSquared);
  28.                 my $temp = Math::BigFloat->new();
  29.                 $temp->badd($Term);
  30.                 $temp->bdiv($Divisor);
  31.                 $Result->bsub($temp);
  32.  
  33.                 $Divisor += 2;
  34.                 $Term->bdiv($XSquared);
  35.                 my $temp2 = Math::BigFloat->new();
  36.                 $temp2->badd($Term);
  37.                 $temp2->bdiv($Divisor);
  38.                 $Result->badd($temp2);
  39.         }
  40.         return $Result;
  41. }
  42.  
  43. sub calc_pi {
  44.         my ($iter) = @_;
  45.  
  46.         my $pi = Math::BigFloat->new();
  47.         $pi->badd(&ataninvint(5, $iter));
  48.         $pi->bmul(4);
  49.  
  50.         my $x = Math::BigFloat->new();
  51.         $x->badd(&ataninvint(239, $iter));
  52.  
  53.         $x->bneg();
  54.         $pi->badd($x);
  55.  
  56.         $pi->bmul(4);
  57.  
  58.         print "\nPI: $pi\n";
  59. }

Raw Paste


Login or Register to edit or fork this paste. It's free.