public function getY($x) { $value = 0; foreach ($this->equationDefinition as $exponent => $coefficient) { $value = BCProvider::add($value, BCProvider::multiply($coefficient, BCProvider::exp($x, $exponent))); } return Numbers::make($this->numberType, $value); }
/** * Generates a random number in the provided range, where all possible values are equally likely. (Even distribution.) * * NOTE: If $max is more than PHP_INT_MAX or $min is less than PHP_INT_MIN, no additional entropy will be gained for * the random number, and the distribution will become less evenly distributed across all possible values due to * rounding. * * @param $min * @param $max * @return NumberInterface */ public function random($min = 0, $max = PHP_INT_MAX) { $min = Numbers::makeOrDont(Numbers::IMMUTABLE, $min); $max = Numbers::makeOrDont(Numbers::IMMUTABLE, $max); $difference = new ImmutableNumber(BCProvider::add($max->absValue(), $min->absValue())); $randFactory = new Factory(); if ($max->compare(PHP_INT_MAX) != 1 && $min->compare(PHP_INT_MIN) != -1 && $difference->compare(PHP_INT_MAX) != 1) { $x = $randFactory->getMediumStrengthGenerator()->generateInt($min, $max); return Numbers::makeFromBase10($this->numberType, $x, null, $this->contextBase); } else { $x = $randFactory->getMediumStrengthGenerator()->generateInt(); $fraction = BCProvider::divide($x, PHP_INT_MAX); $addedValue = BCProvider::multiply($fraction, $difference->getValue()); $randVal = Numbers::makeFromBase10($this->numberType, BCProvider::add($min->getValue(), $addedValue), null, $this->contextBase); return $randVal->round(); } }
public function ceil() { $fractional = $this->getFractionalPart(); $whole = $this->getWholePart(); if ($fractional > 0) { $whole = BCProvider::add($whole, 1); } return $this->setValue($whole); }