Math_Integer
[ class tree: Math_Integer ] [ index: Math_Integer ] [ all elements ]

Source for file gmp.php

Documentation is available at gmp.php

  1. <?php
  2.  
  3. //include_once 'Math/Integer/common.php';
  4. include_once 'common.php';
  5.  
  6. class Math_Integer_GMP extends Math_Integer_Common {/*{{{*/
  7.     
  8.     function Math_Integer_GMP($value{/*{{{*/
  9.         $this->setValue($value);
  10.     }/*}}}*/
  11.  
  12.     function toString({/*{{{*/
  13.         return gmp_strval($this->_value);
  14.     }/*}}}*/
  15.  
  16.     function makeClone({/*{{{*/
  17.         return new Math_Integer_GMP($this->toString());
  18.     }/*}}}*/
  19.  
  20.     function setValue($value{/*{{{*/
  21.         if ($this->_is($value'Math_Integer_GMP')) {
  22.             $this->setValue($value->toString());
  23.         elseif (is_resource($value&& get_resource_type($value== 'GMP integer'{
  24.             $this->_value $value;
  25.         elseif (is_scalar($value)) {
  26.             $this->_value = gmp_init($value);
  27.         else {
  28.             $this->_value = null;
  29.         }
  30.     }/*}}}*/
  31.  
  32.     function getValue({/*{{{*/
  33.         return $this->_value;
  34.     }/*}}}*/
  35.  
  36.     function negate({/*{{{*/
  37.         $newval = gmp_neg($this->getValue());
  38.         if (is_resource($newval)) {
  39.             $this->setValue($newval);
  40.             return true;
  41.         else {
  42.             return PEAR::raiseError('Error while negating Math_Integer_GMP '.
  43.                                     'object: '.$this->toString());
  44.         }
  45.     }/*}}}*/
  46.  
  47.     function abs({/*{{{*/
  48.         $newval = gmp_abs($this->getValue());
  49.         if (is_resource($newval)) {
  50.             $this->setValue($newval);
  51.             return true;
  52.         else {
  53.             return PEAR::raiseError('Error while doing Math_Integer_GMP::abs() '.
  54.                                     'object: '.$this->toString());
  55.         }
  56.     }/*}}}*/
  57.  
  58.     function fact({/*{{{*/
  59.         $newval = gmp_fact($this->toString());
  60.         if (is_resource($newval)) {
  61.             $this->setValue($newval);
  62.             return true;
  63.         else {
  64.             return PEAR::raiseError('Error while doing Math_Integer_GMP::fact() '.
  65.                                     'object: '.$this->toString());
  66.         }
  67.     }/*}}}*/
  68.  
  69.     function add(&$int{/*{{{*/
  70.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  71.             return PEAR::raiseError('Parameter is not a Math_Integer_GMP object');
  72.         }
  73.         $newval = gmp_add($this->getValue()$int->getValue());
  74.         if (is_resource($newval)) {
  75.             $this->setValue($newval);
  76.             return true;
  77.         else {
  78.             return PEAR::raiseError('Error while adding Math_Integer_GMP '.
  79.                                     'objects: '.$this->toString().' and '.
  80.                                     $int->toString());
  81.         }
  82.     }/*}}}*/
  83.  
  84.     function inc({/*{{{*/
  85.         $newval = gmp_add($this->getValue()gmp_init(1));
  86.         if (is_resource($newval)) {
  87.             $this->setValue($newval);
  88.             return true;
  89.         else {
  90.             return PEAR::raiseError('Error while incrementing Math_Integer_GMP '.
  91.                                     'object: '.$this->toString());
  92.         }
  93.     }/*}}}*/
  94.  
  95.     function sub(&$int{/*{{{*/
  96.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  97.             return PEAR::raiseError('Parameter is not a Math_Integer_GMP object');
  98.         }
  99.         $newval = gmp_sub($this->getValue()$int->getValue());
  100.         if (is_resource($newval)) {
  101.             $this->setValue($newval);
  102.             return true;
  103.         else {
  104.             return PEAR::raiseError('Error while substracting Math_Integer_GMP '.
  105.                                     'objects: '.$this->toString().' and '.
  106.                                     $int->toString());
  107.         }
  108.     }/*}}}*/
  109.  
  110.     function dec({/*{{{*/
  111.         $newval = gmp_sub($this->getValue()gmp_init(1));
  112.         if (is_resource($newval)) {
  113.             $this->setValue($newval);
  114.             return true;
  115.         else {
  116.             return PEAR::raiseError('Error while decrementing Math_Integer_GMP '.
  117.                                     'object: '.$this->toString());
  118.         }
  119.     }/*}}}*/
  120.  
  121.     function mul(&$int{/*{{{*/
  122.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  123.             return PEAR::raiseError('Parameter is not a Math_Integer_GMP object');
  124.         }
  125.         $newval = gmp_mul($this->getValue()$int->getValue());
  126.         if (is_resource($newval)) {
  127.             $this->setValue($newval);
  128.             return true;
  129.         else {
  130.             return PEAR::raiseError('Error while multiplying Math_Integer_GMP '.
  131.                                     'objects: '.$this->toString().' and '.
  132.                                     $int->toString());
  133.         }
  134.     }/*}}}*/
  135.  
  136.     function div(&$int{/*{{{*/
  137.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  138.             return PEAR::raiseError('Parameter is not a Math_Integer_GMP object');
  139.         }
  140.         if ($int->isZero()) {
  141.             return PEAR::raiseError('Division by zero is undefined');
  142.         }
  143.         $newval = gmp_div($this->getValue()$int->getValue());
  144.         if (is_resource($newval)) {
  145.             $this->setValue($newval);
  146.             return true;
  147.         else {
  148.             return PEAR::raiseError('Error while dividing Math_Integer_GMP '.
  149.                                     'objects: '.$this->toString().' and '.
  150.                                     $int->toString());
  151.         }
  152.         return $this->_noImplemented('div');
  153.     }/*}}}*/
  154.  
  155.     function pow(&$int{/*{{{*/
  156.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  157.             return PEAR::raiseError('Parameter is not a Math_Integer_GMP object');
  158.         }
  159.         if ($int->isNegative()) {
  160.             return PEAR::raiseError('Exponent cannot be negative');
  161.         elseif ($int->isZero()) {
  162.             $this->setValue(1);
  163.         else {
  164.             $newval = gmp_pow($this->getValue()$int->toString());
  165.             if (is_resource($newval)) {
  166.                 $this->setValue($newval);
  167.                 return true;
  168.             else {
  169.                 return PEAR::raiseError('Error while doing pow($n, $e) Math_Integer_GMP '.
  170.                                         'objects: '.$this->toString().' and '.
  171.                                         $int->toString());
  172.             }
  173.         }
  174.     }/*}}}*/
  175.  
  176.     function powmod(&$int&$mod{/*{{{*/
  177.         $err '';
  178.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  179.             $err .= 'Exponent is not a Math_Integer_GMP object.';
  180.         elseif ($int->isNegative()) {
  181.             $err .= 'Exponent cannot be negative';
  182.         }
  183.         if (!is_empty($err)) {
  184.             $err .= ' ';
  185.         }
  186.         if (!$this->_is(&$mod'Math_Integer_GMP')) {
  187.             $err .= 'Modulus is not a Math_Integer_GMP object.';
  188.         elseif ($mod->isZero(|| $mod->isNegative()) {
  189.             $err .= 'Modulus must be positive and greater than zero';
  190.         }
  191.         if (!empty($err)) {
  192.             return PEAR::raiseError($err);
  193.         }
  194.         $newval = gmp_powm($this->getValue()$int->getValue()$mod->getValue());
  195.         if (is_resource($newval)) {
  196.             $this->setValue($newval);
  197.             return true;
  198.         else {
  199.             return PEAR::raiseError('Error while doing pow(n, e, m) Math_Integer_GMP '.
  200.                                     'objects: '.$this->toString().', '.
  201.                                     $int->toString().', and '.$mod->toString());
  202.         }
  203.     }/*}}}*/
  204.  
  205.     function sqrt({/*{{{*/
  206.         if ($this->isZero()) {
  207.             return true;
  208.         elseif ($this->isNegative()) {
  209.             return PEAR::raiseError('Cannot take square root of a negative number');
  210.         else {
  211.             $newval = gmp_add($this->getValue()$int->getValue());
  212.             if (is_resource($newval)) {
  213.                 $this->setValue($newval);
  214.                 return true;
  215.             else {
  216.                 return PEAR::raiseError('Error while taking a square root of: '.
  217.                                         $this->toString());
  218.             }
  219.         }
  220.     }/*}}}*/
  221.  
  222.     function mod(&$int{/*{{{*/
  223.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  224.             return PEAR::raiseError('Modulus is not a Math_Integer_GMP object');
  225.         elseif ($int->isZero(|| $int->isNegative()) {
  226.             return PEAR::raiseError('Modulus must be positive and greater than zero');
  227.         }
  228.         $newval = gmp_mod($this->getValue()$int->getValue());
  229.         if (is_resource($newval)) {
  230.             $this->setValue($newval);
  231.             return true;
  232.         else {
  233.             return PEAR::raiseError('Error while doing mod(i, m) using the '.
  234.                                     'objects: '.$this->toString().' and '.
  235.                                     $int->toString());
  236.         }
  237.     }/*}}}*/
  238.  
  239.     function compare(&$int{/*{{{*/
  240.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  241.             return PEAR::raiseError('Parameter is not a Math_Integer_GMP object');
  242.         }
  243.         $cmp = gmp_cmp($this->getValue()$int->getValue());
  244.         if ($cmp > 0{
  245.             return 1; 
  246.         elseif ($cmp == 0{
  247.             return 0;
  248.         else {
  249.             return -1;
  250.         }
  251.     }/*}}}*/
  252.  
  253.     function sign({/*{{{*/
  254.         return gmp_sign($this->getValue());
  255.     }/*}}}*/
  256.  
  257.     function gcd(&$int{/*{{{*/
  258.         if (!$this->_is(&$int'Math_Integer_GMP')) {
  259.             return PEAR::raiseError('Parameter is not a Math_Integer_GMP object');
  260.         }
  261.         $gcd = gmp_gcd($this->getValue()$int->getValue());
  262.         if (!is_resource($gcd|| get_resource_type($gcd!= 'GMP integer'{
  263.             return PEAR::raiseError('Unkown error calculating GCD');
  264.         }
  265.         return new Math_Integer_GMP($gcd);
  266.     }/*}}}*/
  267.  
  268.     function isOdd({/*{{{*/
  269.         return gmp_mod($this->getValue()gmp_init(2)) != 0;
  270.     }/*}}}*/
  271.  
  272.     function isEven({/*{{{*/
  273.         return gmp_mod($this->getValue()gmp_init(2)) == 0;
  274.     }/*}}}*/
  275.  
  276.     function isPositive({/*{{{*/
  277.         return gmp_sign($this->getValue()) == 1;
  278.     }/*}}}*/
  279.  
  280.     function isNegative({/*{{{*/
  281.         return gmp_sign($this->getValue()) == -1;
  282.     }/*}}}*/
  283.  
  284.     function isZero({/*{{{*/
  285.         return gmp_sign($this->getValue()) == 0;
  286.     }/*}}}*/
  287.  
  288.     function isPrime($reps=10{/*{{{*/
  289.         if (!is_int($reps)) {
  290.             return PEAR::raiseError('Expecting an integer for the number of repeats');
  291.         }
  292.         if ($reps < 5 || $reps > 10{
  293.             return PEAR::raiseError("Number of repeats for algorithm must be between 5 ".
  294.                                     "and 10 (default). You requested $reps repreats");
  295.         }
  296.         return gmp_prob_prime($this->getValue()$reps);
  297.     }/*}}}*/
  298.  
  299. }/*}}}*/
  300.  
  301. ?>

Documentation generated on Mon, 11 Mar 2019 15:39:15 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.