コード例 #1
0
 /**
  * Convert if possible a supplied argument to a rational
  *
  * @param int|float|string|NumericTypeInterface $value
  *
  * @return \Chippyash\Math\Matrix\RationalNumber
  *
  * @throws \Chippyash\Matrix\Exceptions\MatrixException
  * @throws \Exception
  */
 protected function convertNumberToRational($value)
 {
     if ($value instanceof NumericTypeInterface) {
         return $value->asRational();
     }
     switch (gettype($value)) {
         case 'integer':
             return RationalTypeFactory::create($value, 1);
         case 'double':
             return RationalTypeFactory::fromFloat($value);
         case 'string':
             try {
                 return RationalTypeFactory::fromString($value);
             } catch (\Exception $e) {
                 try {
                     return ComplexTypeFactory::fromString($value)->asRational();
                 } catch (\Exception $ex) {
                     throw new MatrixException('The string representation of the number is invalid for a rational');
                 }
             }
         case 'NULL':
             return RationalTypeFactory::create(0, 1);
         case 'boolean':
             return RationalTypeFactory::create($value ? 1 : 0, 1);
         default:
             throw new MatrixException('Rational expects int, float, string, Rational or NumericTypeInterface ');
     }
 }
コード例 #2
0
 /**
  * Check for rational type, converting if necessary
  *
  * @param  NumericTypeInterface $a
  * @param  NumericTypeInterface $b
  * @return array [RationalType, RationalType]
  */
 protected function checkRationalTypes(NumericTypeInterface $a, NumericTypeInterface $b)
 {
     $a1 = $a instanceof RationalType ? $a : $a->asRational();
     $b1 = $b instanceof RationalType ? $b : $b->asRational();
     return [$a1, $b1];
 }
コード例 #3
0
 /**
  * Check for float type, converting if necessary
  *
  * @param  NumericTypeInterface $a
  * @param  NumericTypeInterface $b
  * @return array [FloatType, FloatType]
  */
 protected function checkFloatTypes(NumericTypeInterface $a, NumericTypeInterface $b)
 {
     $a1 = $a instanceof FloatType ? $a : $a->asFloatType();
     $b1 = $b instanceof FloatType ? $b : $b->asFloatType();
     return [$a1, $b1];
 }
コード例 #4
0
 /**
  * Compare int and float types
  *
  * @param  NI $a
  * @param  NI $b
  * @return int
  */
 protected function intFloatCompare(NI $a, NI $b)
 {
     return $this->rationalCompare(RationalTypeFactory::fromFloat($a->asFloatType()), RationalTypeFactory::fromFloat($b->asFloatType()));
 }