PERL   33

pi2

Guest on 24th August 2022 04:42:10 AM

  1. use Math::BigFloat;
  2.  
  3. $|++;
  4.  
  5. &calc_pi(100);
  6.  
  7. sub calc_pi {
  8.         my ($iter) = @_;
  9.  
  10.         #
  11.         # set up for atan(5)
  12.         #
  13.         my $Result1 = Math::BigFloat->bone();
  14.         $Result1->bdiv(5);
  15.         my $XSquared1 = 5 * 5;
  16.         my $Divisor1 = 1;
  17.         my $Term1 = Math::BigFloat->new();
  18.         $Term1->badd($Result1);
  19.         my $TempTerm1 = Math::BigFloat->new();
  20.  
  21.         #
  22.         # set up for atan(239)
  23.         #
  24.         my $Result2 = Math::BigFloat->bone();
  25.         $Result2->bdiv(239);
  26.         my $XSquared2 = 239 * 239;
  27.         my $Divisor2 = 1;
  28.         my $Term2 = Math::BigFloat->new();
  29.         $Term2->badd($Result2);
  30.         my $TempTerm2 = Math::BigFloat->new();
  31.  
  32.         for(1..$iter){
  33.  
  34.                 #
  35.                 # calc atan(5)
  36.                 #
  37.                 $Divisor1 += 2;
  38.                 $Term1->bdiv($XSquared1);
  39.                 my $temp1 = Math::BigFloat->new();
  40.                 $temp1->badd($Term1);
  41.                 $temp1->bdiv($Divisor1);
  42.                 $Result1->bsub($temp1);
  43.                 $Divisor1 += 2;
  44.                 $Term1->bdiv($XSquared1);
  45.                 my $temptwo1 = Math::BigFloat->new();
  46.                 $temptwo1->badd($Term1);
  47.                 $temptwo1->bdiv($Divisor1);
  48.                 $Result1->badd($temptwo1);
  49.  
  50.                 #
  51.                 # calc atan(239)
  52.                 #
  53.                 $Divisor2 += 2;
  54.                 $Term2->bdiv($XSquared2);
  55.                 my $temp2 = Math::BigFloat->new();
  56.                 $temp2->badd($Term2);
  57.                 $temp2->bdiv($Divisor2);
  58.                 $Result2->bsub($temp2);
  59.                 $Divisor2 += 2;
  60.                 $Term2->bdiv($XSquared2);
  61.                 my $temptwo2 = Math::BigFloat->new();
  62.                 $temptwo2->badd($Term2);
  63.                 $temptwo2->bdiv($Divisor2);
  64.                 $Result2->badd($temptwo2);
  65.  
  66.                 #
  67.                 # calc pi
  68.                 #
  69.                 my $pi = Math::BigFloat->new();
  70.                 $pi->badd($Result1);
  71.                 $pi->bmul(4);
  72.                 my $x = Math::BigFloat->new();
  73.                 $x->badd($Result2);
  74.                 $x->bneg();
  75.                 $pi->badd($x);
  76.                 $pi->bmul(4);
  77.                 print "PI: $pi\n";
  78.  
  79.         }
  80. }

Raw Paste


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