Aggiornato Composer
This commit is contained in:
183
vendor/brick/math/src/BigInteger.php
vendored
183
vendor/brick/math/src/BigInteger.php
vendored
@@ -26,10 +26,8 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* No leading zeros must be present.
|
||||
* No leading minus sign must be present if the number is zero.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $value;
|
||||
private string $value;
|
||||
|
||||
/**
|
||||
* Protected constructor. Use a factory method to obtain an instance.
|
||||
@@ -44,15 +42,11 @@ final class BigInteger extends BigNumber
|
||||
/**
|
||||
* Creates a BigInteger of the given value.
|
||||
*
|
||||
* @param BigNumber|int|float|string $value
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws MathException If the value cannot be converted to a BigInteger.
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public static function of($value) : BigNumber
|
||||
public static function of(BigNumber|int|float|string $value) : BigInteger
|
||||
{
|
||||
return parent::of($value)->toBigInteger();
|
||||
}
|
||||
@@ -71,8 +65,6 @@ final class BigInteger extends BigNumber
|
||||
* @param string $number The number to convert, in the given base.
|
||||
* @param int $base The base of the number, between 2 and 36.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws NumberFormatException If the number is empty, or contains invalid chars for the given base.
|
||||
* @throws \InvalidArgumentException If the base is out of range.
|
||||
*
|
||||
@@ -138,8 +130,6 @@ final class BigInteger extends BigNumber
|
||||
* @param string $number The number to parse.
|
||||
* @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws NumberFormatException If the given number is empty or contains invalid chars for the given alphabet.
|
||||
* @throws \InvalidArgumentException If the alphabet does not contain at least 2 chars.
|
||||
*
|
||||
@@ -183,8 +173,6 @@ final class BigInteger extends BigNumber
|
||||
* @param bool $signed Whether to interpret as a signed number in two's-complement representation with a leading
|
||||
* sign bit.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws NumberFormatException If the string is empty.
|
||||
*/
|
||||
public static function fromBytes(string $value, bool $signed = true) : BigInteger
|
||||
@@ -217,15 +205,13 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* Using the default random bytes generator, this method is suitable for cryptographic use.
|
||||
*
|
||||
* @psalm-param callable(int): string $randomBytesGenerator
|
||||
* @psalm-param (callable(int): string)|null $randomBytesGenerator
|
||||
*
|
||||
* @param int $numBits The number of bits.
|
||||
* @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, and returns a
|
||||
* string of random bytes of the given length. Defaults to the
|
||||
* `random_bytes()` function.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws \InvalidArgumentException If $numBits is negative.
|
||||
*/
|
||||
public static function randomBits(int $numBits, ?callable $randomBytesGenerator = null) : BigInteger
|
||||
@@ -266,13 +252,14 @@ final class BigInteger extends BigNumber
|
||||
* and returns a string of random bytes of the given length.
|
||||
* Defaults to the `random_bytes()` function.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws MathException If one of the parameters cannot be converted to a BigInteger,
|
||||
* or `$min` is greater than `$max`.
|
||||
*/
|
||||
public static function randomRange($min, $max, ?callable $randomBytesGenerator = null) : BigInteger
|
||||
{
|
||||
public static function randomRange(
|
||||
BigNumber|int|float|string $min,
|
||||
BigNumber|int|float|string $max,
|
||||
?callable $randomBytesGenerator = null
|
||||
) : BigInteger {
|
||||
$min = BigInteger::of($min);
|
||||
$max = BigInteger::of($max);
|
||||
|
||||
@@ -298,8 +285,6 @@ final class BigInteger extends BigNumber
|
||||
/**
|
||||
* Returns a BigInteger representing zero.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public static function zero() : BigInteger
|
||||
@@ -320,8 +305,6 @@ final class BigInteger extends BigNumber
|
||||
/**
|
||||
* Returns a BigInteger representing one.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public static function one() : BigInteger
|
||||
@@ -342,8 +325,6 @@ final class BigInteger extends BigNumber
|
||||
/**
|
||||
* Returns a BigInteger representing ten.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public static function ten() : BigInteger
|
||||
@@ -361,16 +342,29 @@ final class BigInteger extends BigNumber
|
||||
return $ten;
|
||||
}
|
||||
|
||||
public static function gcdMultiple(BigInteger $a, BigInteger ...$n): BigInteger
|
||||
{
|
||||
$result = $a;
|
||||
|
||||
foreach ($n as $next) {
|
||||
$result = $result->gcd($next);
|
||||
|
||||
if ($result->isEqualTo(1)) {
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the sum of this number and the given one.
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigInteger.
|
||||
*
|
||||
* @return BigInteger The result.
|
||||
*
|
||||
* @throws MathException If the number is not valid, or is not convertible to a BigInteger.
|
||||
*/
|
||||
public function plus($that) : BigInteger
|
||||
public function plus(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -392,11 +386,9 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigInteger.
|
||||
*
|
||||
* @return BigInteger The result.
|
||||
*
|
||||
* @throws MathException If the number is not valid, or is not convertible to a BigInteger.
|
||||
*/
|
||||
public function minus($that) : BigInteger
|
||||
public function minus(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -414,11 +406,9 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigInteger.
|
||||
*
|
||||
* @return BigInteger The result.
|
||||
*
|
||||
* @throws MathException If the multiplier is not a valid number, or is not convertible to a BigInteger.
|
||||
*/
|
||||
public function multipliedBy($that) : BigInteger
|
||||
public function multipliedBy(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -441,12 +431,10 @@ final class BigInteger extends BigNumber
|
||||
* @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.
|
||||
* @param int $roundingMode An optional rounding mode.
|
||||
*
|
||||
* @return BigInteger The result.
|
||||
*
|
||||
* @throws MathException If the divisor is not a valid number, is not convertible to a BigInteger, is zero,
|
||||
* or RoundingMode::UNNECESSARY is used and the remainder is not zero.
|
||||
*/
|
||||
public function dividedBy($that, int $roundingMode = RoundingMode::UNNECESSARY) : BigInteger
|
||||
public function dividedBy(BigNumber|int|float|string $that, int $roundingMode = RoundingMode::UNNECESSARY) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -466,10 +454,6 @@ final class BigInteger extends BigNumber
|
||||
/**
|
||||
* Returns this number exponentiated to the given value.
|
||||
*
|
||||
* @param int $exponent The exponent.
|
||||
*
|
||||
* @return BigInteger The result.
|
||||
*
|
||||
* @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000.
|
||||
*/
|
||||
public function power(int $exponent) : BigInteger
|
||||
@@ -498,11 +482,9 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws DivisionByZeroException If the divisor is zero.
|
||||
*/
|
||||
public function quotient($that) : BigInteger
|
||||
public function quotient(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -526,11 +508,9 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws DivisionByZeroException If the divisor is zero.
|
||||
*/
|
||||
public function remainder($that) : BigInteger
|
||||
public function remainder(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -556,7 +536,7 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @throws DivisionByZeroException If the divisor is zero.
|
||||
*/
|
||||
public function quotientAndRemainder($that) : array
|
||||
public function quotientAndRemainder(BigNumber|int|float|string $that) : array
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -582,11 +562,9 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws DivisionByZeroException If the divisor is zero.
|
||||
*/
|
||||
public function mod($that) : BigInteger
|
||||
public function mod(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -602,10 +580,6 @@ final class BigInteger extends BigNumber
|
||||
/**
|
||||
* Returns the modular multiplicative inverse of this BigInteger modulo $m.
|
||||
*
|
||||
* @param BigInteger $m
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws DivisionByZeroException If $m is zero.
|
||||
* @throws NegativeNumberException If $m is negative.
|
||||
* @throws MathException If this BigInteger has no multiplicative inverse mod m (that is, this BigInteger
|
||||
@@ -642,12 +616,10 @@ final class BigInteger extends BigNumber
|
||||
* @param BigNumber|int|float|string $exp The exponent. Must be positive or zero.
|
||||
* @param BigNumber|int|float|string $mod The modulus. Must be strictly positive.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws NegativeNumberException If any of the operands is negative.
|
||||
* @throws DivisionByZeroException If the modulus is zero.
|
||||
*/
|
||||
public function modPow($exp, $mod) : BigInteger
|
||||
public function modPow(BigNumber|int|float|string $exp, BigNumber|int|float|string $mod) : BigInteger
|
||||
{
|
||||
$exp = BigInteger::of($exp);
|
||||
$mod = BigInteger::of($mod);
|
||||
@@ -671,10 +643,8 @@ final class BigInteger extends BigNumber
|
||||
* The GCD is always positive, unless both operands are zero, in which case it is zero.
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function gcd($that) : BigInteger
|
||||
public function gcd(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -696,8 +666,6 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* The result is the largest x such that x² ≤ n.
|
||||
*
|
||||
* @return BigInteger
|
||||
*
|
||||
* @throws NegativeNumberException If this number is negative.
|
||||
*/
|
||||
public function sqrt() : BigInteger
|
||||
@@ -713,8 +681,6 @@ final class BigInteger extends BigNumber
|
||||
|
||||
/**
|
||||
* Returns the absolute value of this number.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function abs() : BigInteger
|
||||
{
|
||||
@@ -723,8 +689,6 @@ final class BigInteger extends BigNumber
|
||||
|
||||
/**
|
||||
* Returns the inverse of this number.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function negated() : BigInteger
|
||||
{
|
||||
@@ -737,10 +701,8 @@ final class BigInteger extends BigNumber
|
||||
* This method returns a negative BigInteger if and only if both operands are negative.
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function and($that) : BigInteger
|
||||
public function and(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -753,10 +715,8 @@ final class BigInteger extends BigNumber
|
||||
* This method returns a negative BigInteger if and only if either of the operands is negative.
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function or($that) : BigInteger
|
||||
public function or(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -769,10 +729,8 @@ final class BigInteger extends BigNumber
|
||||
* This method returns a negative BigInteger if and only if exactly one of the operands is negative.
|
||||
*
|
||||
* @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function xor($that) : BigInteger
|
||||
public function xor(BigNumber|int|float|string $that) : BigInteger
|
||||
{
|
||||
$that = BigInteger::of($that);
|
||||
|
||||
@@ -781,8 +739,6 @@ final class BigInteger extends BigNumber
|
||||
|
||||
/**
|
||||
* Returns the bitwise-not of this BigInteger.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function not() : BigInteger
|
||||
{
|
||||
@@ -791,10 +747,6 @@ final class BigInteger extends BigNumber
|
||||
|
||||
/**
|
||||
* Returns the integer left shifted by a given number of bits.
|
||||
*
|
||||
* @param int $distance The distance to shift.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function shiftedLeft(int $distance) : BigInteger
|
||||
{
|
||||
@@ -811,10 +763,6 @@ final class BigInteger extends BigNumber
|
||||
|
||||
/**
|
||||
* Returns the integer right shifted by a given number of bits.
|
||||
*
|
||||
* @param int $distance The distance to shift.
|
||||
*
|
||||
* @return BigInteger
|
||||
*/
|
||||
public function shiftedRight(int $distance) : BigInteger
|
||||
{
|
||||
@@ -840,8 +788,6 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* For positive BigIntegers, this is equivalent to the number of bits in the ordinary binary representation.
|
||||
* Computes (ceil(log2(this < 0 ? -this : this+1))).
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getBitLength() : int
|
||||
{
|
||||
@@ -860,8 +806,6 @@ final class BigInteger extends BigNumber
|
||||
* Returns the index of the rightmost (lowest-order) one bit in this BigInteger.
|
||||
*
|
||||
* Returns -1 if this BigInteger contains no one bits.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getLowestSetBit() : int
|
||||
{
|
||||
@@ -881,8 +825,6 @@ final class BigInteger extends BigNumber
|
||||
|
||||
/**
|
||||
* Returns whether this number is even.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isEven() : bool
|
||||
{
|
||||
@@ -891,8 +833,6 @@ final class BigInteger extends BigNumber
|
||||
|
||||
/**
|
||||
* Returns whether this number is odd.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isOdd() : bool
|
||||
{
|
||||
@@ -906,8 +846,6 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param int $n The bit to test, 0-based.
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @throws \InvalidArgumentException If the bit to test is negative.
|
||||
*/
|
||||
public function testBit(int $n) : bool
|
||||
@@ -919,10 +857,7 @@ final class BigInteger extends BigNumber
|
||||
return $this->shiftedRight($n)->isOdd();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function compareTo($that) : int
|
||||
public function compareTo(BigNumber|int|float|string $that) : int
|
||||
{
|
||||
$that = BigNumber::of($that);
|
||||
|
||||
@@ -933,49 +868,31 @@ final class BigInteger extends BigNumber
|
||||
return - $that->compareTo($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getSign() : int
|
||||
{
|
||||
return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function toBigInteger() : BigInteger
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function toBigDecimal() : BigDecimal
|
||||
{
|
||||
return BigDecimal::create($this->value);
|
||||
return self::newBigDecimal($this->value);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function toBigRational() : BigRational
|
||||
{
|
||||
return BigRational::create($this, BigInteger::one(), false);
|
||||
return self::newBigRational($this, BigInteger::one(), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal
|
||||
{
|
||||
return $this->toBigDecimal()->toScale($scale, $roundingMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function toInt() : int
|
||||
{
|
||||
$intValue = (int) $this->value;
|
||||
@@ -987,9 +904,6 @@ final class BigInteger extends BigNumber
|
||||
return $intValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function toFloat() : float
|
||||
{
|
||||
return (float) $this->value;
|
||||
@@ -1000,10 +914,6 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* The output will always be lowercase for bases greater than 10.
|
||||
*
|
||||
* @param int $base
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @throws \InvalidArgumentException If the base is out of range.
|
||||
*/
|
||||
public function toBase(int $base) : string
|
||||
@@ -1027,8 +937,6 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @throws NegativeNumberException If this number is negative.
|
||||
* @throws \InvalidArgumentException If the given alphabet does not contain at least 2 chars.
|
||||
*/
|
||||
@@ -1063,8 +971,6 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param bool $signed Whether to output a signed number in two's-complement representation with a leading sign bit.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @throws NegativeNumberException If $signed is false, and the number is negative.
|
||||
*/
|
||||
public function toBytes(bool $signed = true) : string
|
||||
@@ -1108,9 +1014,6 @@ final class BigInteger extends BigNumber
|
||||
return \hex2bin($hex);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __toString() : string
|
||||
{
|
||||
return $this->value;
|
||||
@@ -1136,8 +1039,6 @@ final class BigInteger extends BigNumber
|
||||
*
|
||||
* @param array{value: string} $data
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws \LogicException
|
||||
*/
|
||||
public function __unserialize(array $data): void
|
||||
@@ -1153,8 +1054,6 @@ final class BigInteger extends BigNumber
|
||||
* This method is required by interface Serializable and SHOULD NOT be accessed directly.
|
||||
*
|
||||
* @internal
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function serialize() : string
|
||||
{
|
||||
@@ -1167,10 +1066,6 @@ final class BigInteger extends BigNumber
|
||||
* @internal
|
||||
* @psalm-suppress RedundantPropertyInitializationCheck
|
||||
*
|
||||
* @param string $value
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws \LogicException
|
||||
*/
|
||||
public function unserialize($value) : void
|
||||
|
||||
Reference in New Issue
Block a user