use Math::BigFloat; $|++; &calc_pi(100); sub calc_pi { my ($iter) = @_; # # set up for atan(5) # my $Result1 = Math::BigFloat->bone(); $Result1->bdiv(5); my $XSquared1 = 5 * 5; my $Divisor1 = 1; my $Term1 = Math::BigFloat->new(); $Term1->badd($Result1); my $TempTerm1 = Math::BigFloat->new(); # # set up for atan(239) # my $Result2 = Math::BigFloat->bone(); $Result2->bdiv(239); my $XSquared2 = 239 * 239; my $Divisor2 = 1; my $Term2 = Math::BigFloat->new(); $Term2->badd($Result2); my $TempTerm2 = Math::BigFloat->new(); for(1..$iter){ # # calc atan(5) # $Divisor1 += 2; $Term1->bdiv($XSquared1); my $temp1 = Math::BigFloat->new(); $temp1->badd($Term1); $temp1->bdiv($Divisor1); $Result1->bsub($temp1); $Divisor1 += 2; $Term1->bdiv($XSquared1); my $temptwo1 = Math::BigFloat->new(); $temptwo1->badd($Term1); $temptwo1->bdiv($Divisor1); $Result1->badd($temptwo1); # # calc atan(239) # $Divisor2 += 2; $Term2->bdiv($XSquared2); my $temp2 = Math::BigFloat->new(); $temp2->badd($Term2); $temp2->bdiv($Divisor2); $Result2->bsub($temp2); $Divisor2 += 2; $Term2->bdiv($XSquared2); my $temptwo2 = Math::BigFloat->new(); $temptwo2->badd($Term2); $temptwo2->bdiv($Divisor2); $Result2->badd($temptwo2); # # calc pi # my $pi = Math::BigFloat->new(); $pi->badd($Result1); $pi->bmul(4); my $x = Math::BigFloat->new(); $x->badd($Result2); $x->bneg(); $pi->badd($x); $pi->bmul(4); print "PI: $pi\n"; } }