PHP calculating Pi
Petr Faltus development
tPi.php
GitHub repository: php-calculating-pi
git clone https://github.com/petrfaltus/php-calculating-pi.git
Directories to tPi.php in the repository: class
<?php abstract class tPi { const DESCRIPTION = "?"; protected $precision_digits; protected $pi = "?"; protected $calculation_cycles = 0; protected $calculation_time = 0; //---------------------------------------------------------------------------- public function get_pi() { return $this->pi; } //---------------------------------------------------------------------------- public function print_report() { echo self::DESCRIPTION.PHP_EOL; echo PHP_EOL; echo $this->pi.PHP_EOL; echo PHP_EOL; echo "Desetinnych mist: ".$this->precision_digits.PHP_EOL; echo "Vypocetnich cyklu: ".$this->calculation_cycles.PHP_EOL; echo "Delka vypoctu: ".$this->calculation_time."s".PHP_EOL; echo PHP_EOL; return; } //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- function __construct($precision_digits) { $this->precision_digits = $precision_digits; return; } //---------------------------------------------------------------------------- } ?>
tPi1.php
Directories to tPi1.php in the repository: class
<?php class tPi1 extends tPi { const DESCRIPTION = "Program pro vypocet Pi = 4*( 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... )"; //---------------------------------------------------------------------------- public function calculate() { $scale = $this->precision_digits + 2; bcscale($scale); $polarity = 1; $this->calculation_cycles = 0; $result = 0; $start_time = gettimeofday(true); // calculation time measurent do { $denominator = 2 * $this->calculation_cycles + 1; // 1, 3, 5, 7, 9, ... $fraction = bcdiv(1, $denominator); $contribution = bcmul($polarity, $fraction); $result = bcadd($result, $contribution); $polarity *= -1; $this->calculation_cycles++; } while (bccomp($contribution, 0)); $this->pi = bcmul(4, $result, $this->precision_digits); $finish_time = gettimeofday(true); // calculation time measurent $this->calculation_time = $finish_time - $start_time; return; } //---------------------------------------------------------------------------- } ?>
tPi2.php
Directories to tPi2.php in the repository: class
<?php class tPi2 extends tPi { const DESCRIPTION = "Program pro vypocet Pi = 4*( (1/2+1/3) - (1/2^3+1/3^3)/3 + (1/2^5+1/3^5)/5 - (1/2^7+1/3^7)/7 + ... )"; //---------------------------------------------------------------------------- public function calculate() { $scale = $this->precision_digits + 2; bcscale($scale); $fraction_one = bcdiv(1, 2); // 1/2 $fraction_two = bcdiv(1, 3); // 1/3 $polarity = 1; $this->calculation_cycles = 0; $result = 0; $start_time = gettimeofday(true); // calculation time measurent do { $numerator = bcadd($fraction_one, $fraction_two); // 1/2^N+1/3^N $denominator = 2 * $this->calculation_cycles + 1; // 1, 3, 5, 7, 9, ... $fraction = bcdiv($numerator, $denominator); $contribution = bcmul($polarity, $fraction); $result = bcadd($result, $contribution); $fraction_one = bcdiv($fraction_one, 4); // *= 1/2 $fraction_two = bcdiv($fraction_two, 9); // *= 1/3 $polarity *= -1; $this->calculation_cycles++; } while (bccomp($contribution, 0)); $this->pi = bcmul(4, $result, $this->precision_digits); $finish_time = gettimeofday(true); // calculation time measurent $this->calculation_time = $finish_time - $start_time; return; } //---------------------------------------------------------------------------- } ?>
tPi3.php
Directories to tPi3.php in the repository: class
<?php class tPi3 extends tPi { const DESCRIPTION = "Program pro vypocet Pi = 4*( (4/5-1/239) - (4/5^3-1/239^3)/3 + (4/5^5-1/239^5)/5 - (4/5^7-1/239^7)/7 + ... )"; //---------------------------------------------------------------------------- public function calculate() { $scale = $this->precision_digits + 2; bcscale($scale); $fraction_one = bcdiv(4, 5); // 4/5 $fraction_two = bcdiv(1, 239); // 1/239 $polarity = 1; $this->calculation_cycles = 0; $result = 0; $start_time = gettimeofday(true); // calculation time measurent do { $numerator = bcsub($fraction_one, $fraction_two); // 4/5^N+1/239^N $denominator = 2 * $this->calculation_cycles + 1; // 1, 3, 5, 7, 9, ... $fraction = bcdiv($numerator, $denominator); $contribution = bcmul($polarity, $fraction); $result = bcadd($result, $contribution); $fraction_one = bcdiv($fraction_one, 25); // *= 1/5 $fraction_two = bcdiv($fraction_two, 57121); // *= 1/239 $polarity *= -1; $this->calculation_cycles++; } while (bccomp($contribution, 0)); $this->pi = bcmul(4, $result, $this->precision_digits); $finish_time = gettimeofday(true); // calculation time measurent $this->calculation_time = $finish_time - $start_time; return; } //---------------------------------------------------------------------------- } ?>
do.php
#!/usr/bin/php <?php const BCMATH_EXTENSION = "bcmath"; const PATH_TO_CLASSES = "class"; # test the required extension if (!extension_loaded(BCMATH_EXTENSION)) { echo "ERROR, the ".BCMATH_EXTENSION." extension is not present.".PHP_EOL; echo "- uncomment or add the line 'extension=".BCMATH_EXTENSION."' under the '[PHP]' section in your php.ini file, please".PHP_EOL; exit; } # register my classes auto loading spl_autoload_register(function ($class_name) { $class_source_file_path = PATH_TO_CLASSES."/".$class_name.".php"; if (is_file($class_source_file_path)) { require_once $class_source_file_path; } }); echo "PHP version: ".phpversion().PHP_EOL; echo PHP_EOL; /* $precision_digits = 6; # the algorithm 1 $pi1 = new tPi1($precision_digits); $pi1->calculate(); $pi1->print_report(); */ $precision_digits = 201; # the algorithm 2 $pi2 = new tPi2($precision_digits); $pi2->calculate(); $pi2->print_report(); # the algorithm 3 $pi3 = new tPi3($precision_digits); $pi3->calculate(); $pi3->print_report(); ?>
Development tools
Developer ASCII table
Characters and HTML entities in the UTF-8 table
Predefined web CSS colors
CSS px to rem converter
🤝 Your IP address is 3.139.108.99
(ec2-3-139-108-99.us-east-2.compute.amazonaws.com
)