Skip to content

Releases: brick/math

0.17.0

17 Mar 13:03

Choose a tag to compare

πŸ’₯ Breaking changes

  • Deprecated method BigDecimal::hasNonZeroFractionalPart() has been removed, use ! $number->getFractionalPart()->isZero() instead
  • Exception constructors and factory methods are now @internal

✨ Compatibility improvements

  • BigDecimal::fromFloatExact() now supports 32-bit PHP

0.16.2

15 Mar 01:01

Choose a tag to compare

✨ New features

New methods to create a BigDecimal from a float value:

  • BigDecimal::fromFloatExact()
  • BigDecimal::fromFloatShortest()

0.16.1

09 Mar 13:49

Choose a tag to compare

πŸ‘Œ Improvements

  • Add @return non-empty-string to toString(), jsonSerialize() and __toString() (#111 by @vudaltsov)

0.16.0

06 Mar 13:30

Choose a tag to compare

πŸ’₯ Breaking changes

  • BigInteger::getLowestSetBit() now returns null instead of -1 when the number is zero
  • Deprecated method BigRational::simplified() has been removed, as it is now a no-op

✨ New features

  • New method: BigDecimal::getIntegralPart() returns the integral part as BigInteger (this method existed with a different signature in version 0.14, and was removed in 0.15)
  • New method: BigDecimal::getFractionalPart() returns the fractional part as BigDecimal (this method existed with a different signature and meaning in version 0.14, and was removed in 0.15)

πŸ—‘οΈ Deprecations

  • Method BigDecimal::hasNonZeroFractionalPart() is deprecated, use ->getFractionalPart()->isZero() instead

0.15.0

20 Feb 15:47

Choose a tag to compare

πŸ’₯ Breaking changes

  • floating-point inputs are no longer accepted by of() and arithmetic methods, use of((string) $float) to get the same behaviour as before (#105)
  • BigRational is now always simplified to lowest terms: all operations, including of() and ofFraction(), now return a fraction in its simplest form (e.g. 2/3 instead of 4/6)
  • BigDecimal::dividedBy() now requires the $scale parameter
  • BigInteger::sqrt() and BigDecimal::sqrt() now default to RoundingMode::Unnecessary, explicitly pass RoundingMode::Down to get the previous behaviour
  • BigInteger::mod() now uses Euclidean modulo semantics: the modulus must be strictly positive, and the result is always non-negative; this change aligns with Java's BigInteger.mod() behaviour
  • BigInteger::mod(), modInverse() and modPow() now throw InvalidArgumentException (instead of NegativeNumberException) for negative modulus/exponent arguments
  • MathException is now an interface instead of a class
  • BigDecimal::getPrecision() now returns 1 for zero values
  • BigNumber::min(), max() and sum() now throw an ArgumentCountError when called with no arguments (previously threw InvalidArgumentException)
  • BigInteger::randomBits() and randomRange() now throw RandomSourceException when random byte generation fails or returns invalid data

Deprecated API elements removed:

  • deprecated method BigInteger::testBit() has been removed, use isBitSet() instead
  • deprecated method BigInteger::gcdMultiple() has been removed, use gcdAll() instead
  • deprecated method BigDecimal::exactlyDividedBy() has been removed, use dividedByExact() instead
  • deprecated method BigDecimal::getIntegralPart() has been removed (will be re-introduced as returning BigInteger in 0.16)
  • deprecated method BigDecimal::getFractionalPart() has been removed (will be re-introduced as returning BigDecimal with a different meaning in 0.16)
  • deprecated method BigDecimal::stripTrailingZeros() has been removed, use strippedOfTrailingZeros() instead
  • deprecated method BigRational::nd() has been removed, use ofFraction() instead
  • deprecated method BigRational::quotient() has been removed, use getIntegralPart() instead
  • deprecated method BigRational::remainder() has been removed, use $number->getNumerator()->remainder($number->getDenominator()) instead
  • deprecated method BigRational::quotientAndRemainder() has been removed, use $number->getNumerator()->quotientAndRemainder($number->getDenominator()) instead
  • deprecated RoundingMode upper snake case constants (e.g. HALF_UP) have been removed, use the pascal case version (e.g. HalfUp) instead

The following breaking changes only affect you if you're using named arguments:

  • BigInteger::mod() now uses $modulus as the parameter name
  • BigInteger::modInverse() now uses $modulus as the parameter name
  • BigInteger::modPow() now uses $exponent and $modulus as parameter names
  • BigInteger::shiftedLeft() now uses $bits as the parameter name
  • BigInteger::shiftedRight() now uses $bits as the parameter name
  • BigInteger::isBitSet() now uses $bitIndex as the parameter name
  • BigInteger::randomBits() now uses $bitCount as the parameter name
  • BigDecimal::withPointMovedLeft() now uses $places as the parameter name
  • BigDecimal::withPointMovedRight() now uses $places as the parameter name

The following breaking changes are unlikely to affect you:

  • DivisionByZeroException::modulusMustNotBeZero() has been renamed to zeroModulus()
  • DivisionByZeroException::denominatorMustNotBeZero() has been renamed to zeroDenominator()
  • IntegerOverflowException::toIntOverflow() has been renamed to integerOutOfRange()
  • RoundingNecessaryException::roundingNecessary() has been removed

πŸ—‘οΈ Deprecations

  • Method BigRational::simplified() is deprecated, as it is now a no-op

✨ New features

  • BigInteger::power(), BigDecimal::power() and BigRational::power() no longer enforce an exponent limit
  • BigInteger::shiftedLeft() and BigInteger::shiftedRight() no longer enforce a limit on the number of bits
  • BigRational::power() now accepts negative exponents
  • New exception: InvalidArgumentException for invalid argument errors
  • New exception: NoInverseException for modular inverse errors
  • New exception: RandomSourceException for random source errors

πŸ‘Œ Improvements

  • Narrowed parameter and return types with static analysis annotations (#108 by @simPod)

0.14.8

10 Feb 14:36

Choose a tag to compare

πŸ—‘οΈ Deprecations

  • Method BigInteger::testBit() is deprecated, use isBitSet() instead

✨ New features

  • New method: BigInteger::isBitSet() (replaces testBit())
  • New method: BigNumber::toString() (alias of magic method __toString())

πŸ‘Œ Improvements

  • Performance optimization of BigRational comparison methods
  • More exceptions have been documented with @throws annotations

0.14.7

07 Feb 10:59

Choose a tag to compare

✨ New features

  • clamp() is now available on the base BigNumber class

πŸ‘Œ Improvements

  • Improved @throws exception documentation

0.14.6

05 Feb 08:11

Choose a tag to compare

πŸ—‘οΈ Deprecations

  • Not passing a $scale to BigDecimal::dividedBy() is deprecated; $scale will be required in 0.15

πŸ‘Œ Improvements

  • BigRational::toFloat() never returns NAN anymore

0.14.5

03 Feb 18:15

Choose a tag to compare

πŸ—‘οΈ Deprecations

  • Not passing a rounding mode to BigInteger::sqrt() and BigDecimal::sqrt() triggers a deprecation notice: the default rounding mode will change from Down to Unnecessary in 0.15

✨ New features

  • BigInteger::sqrt() and BigDecimal::sqrt() now support rounding
  • abs() and negated() methods are now available on the base BigNumber class

πŸ‘Œ Improvements

  • Alphabet is now checked for duplicate characters in BigInteger::(from|to)ArbitraryBase()
  • BigNumber::ofNullable() is now marked as @pure

0.14.4

02 Feb 17:01

Choose a tag to compare

πŸ—‘οΈ Deprecations

  • Passing a negative modulus to BigInteger::mod() is deprecated to align with Euclidean modulo semantics; it will throw InvalidArgumentException in 0.15
  • Method BigDecimal::stripTrailingZeros() is deprecated, use strippedOfTrailingZeros() instead

✨ New features

  • BigInteger::modPow() now accepts negative bases
  • New method: BigDecimal::strippedOfTrailingZeros() (replaces stripTrailingZeros())

πŸ‘Œ Improvements

  • clamp() methods are now marked as @pure