Benjamin Morel
db16e619c3
Add BigDecimal::quotient() and remainder() methods
2015-07-03 18:05:02 +02:00
Benjamin Morel
271b619453
Rename BigDecimal::dividedAndRemainder() to quotientAndRemainder()
...
This is consistent with the naming of the BigInteger method.
2015-07-03 17:54:02 +02:00
Benjamin Morel
38a6b8c342
Add BigNumber::toInteger() and toFloat() methods
...
These methods are implemented by BigInteger, BigDecimal and BigRational.
- toInteger() returns an exact value or throws an exception
- toFloat() returns an approximate value
2015-07-03 17:22:43 +02:00
Benjamin Morel
45e3c3a463
Remove get prefix in method names
...
This improves overall consistency of method names in the project.
For example, it does not make sense to get the reciprocal of a BigRational using reciprocal(), but get its numerator using getNumerator().
List of renamed methods:
- BigNumber::getSign() => sign()
- BigDecimal::getUnscaledValue() => unscaledValue()
- BigDecimal::getScale() => scale()
- BigDecimal::getIntegral() => integral()
- BigDecimal::getFraction() => fraction()
- BigRational::getNumerator() => numerator()
- BigRational::getDenominator() => denominator()
2015-07-03 16:17:23 +02:00
Benjamin Morel
da27465258
Refactor tests
2015-07-03 16:03:58 +02:00
Benjamin Morel
97c7c45c51
All BigNumber subclasses now have zero(), one() and ten() factory methods
...
These methods are optimized for re-usability, and other methods now internally use them.
2015-07-03 15:36:57 +02:00
Benjamin Morel
5fe1176af9
BigDecimal::toBigRational() does not simplify the fraction any more
2015-07-03 13:46:48 +02:00
Benjamin Morel
9418e2a337
Add BigDecimal::of() tests for float values INF and NAN
2015-06-30 13:45:51 +02:00
Benjamin Morel
1420202440
Exact division algorithm is now in BigDecimal::dividedBy()
...
BigRational::toBigDecimal() is now really just a proxy method to BigDecimal::dividedBy().
2015-06-28 22:51:02 +02:00
Benjamin Morel
b3371daab2
BigDecimal::dividedByWithRounding() is now dividedToScale()
...
The $scale and $roundingMode parameters have been swapped.
2015-06-27 11:51:28 +02:00
Benjamin Morel
7376e828c2
Remove BigDecimal::dividedByExact(), now implemented by dividedBy()
2015-06-26 23:47:44 +02:00
Benjamin Morel
1b8b3e43bb
Add basic arithmetic operations to BigNumber
...
- BigInteger::dividedBy() previous implementation is now quotient()
- BigDecimal::dividedBy() previous implementation is now dividedByWithRounding()
2015-06-26 00:36:19 +02:00
Benjamin Morel
eae8ddc49f
Move min() and max() implementations to BigNumber
2015-06-23 13:24:12 +02:00
Benjamin Morel
77610f5fdc
Proper comparison of every BigNumber against all rational number formats
2015-06-22 22:42:10 +02:00
Benjamin Morel
27bc623b70
BigNumber::of() now throws NumberFormatException instead of InvalidArgumentException
...
This allows to catch all of() exceptions with the parent, ArithmeticException.
2015-06-22 22:13:19 +02:00
Benjamin Morel
d6aa1007a9
Introducing a specific RoundingNecessaryException
2015-06-22 21:53:32 +02:00
Benjamin Morel
ed8e1075e2
Introducing a specific DivisionByZeroException
2015-06-22 14:12:40 +02:00
Benjamin Morel
7680dcf634
Move ArithmeticException to an Exception sub-namespace
2015-06-22 13:57:47 +02:00
Benjamin Morel
41c34b1014
Add tests for BigDecimal::of() with leading zeros in exponent
2015-06-21 15:13:54 +02:00
Benjamin Morel
321c00281d
CS fixes
...
Shorthand "int" and "bool" are now used instead of "integer" and "boolean".
This makes more sense as the latter are not accepted as synonyms in PHP 7 scalar type hints and return types.
2015-06-21 14:37:51 +02:00
Benjamin Morel
3195126bbe
Introduce a common interface for big numbers
...
Note that to accommodate the interface, BigDecimal::toBigInteger() does not accept a rounding mode any more.
2015-06-20 10:55:33 +02:00
Benjamin Morel
540ff57c0e
Add BigDecimal::dividedByExact()
2015-06-20 10:37:29 +02:00
Benjamin Morel
9a043bebf4
Add BigDecimal::toBigRational()
2015-06-19 13:09:44 +02:00
Benjamin Morel
ac691e01e5
Add BigDecimal::stripTrailingZeros()
2015-06-17 00:40:31 +02:00
Benjamin Morel
115455238b
Clean up unused imports
2015-06-12 01:20:44 +02:00
Benjamin Morel
e9da17c78d
Add getSign() method to BigInteger and BigDecimal
2015-06-07 14:48:49 +02:00
Benjamin Morel
2aabbe1a53
Missing division by zero test for BigDecimal::divideAndRemainder()
2015-06-05 22:19:20 +02:00
Benjamin Morel
536e6414e6
Performance optimizations
2015-06-05 22:17:20 +02:00
Benjamin Morel
c642d0d0c9
Change Money::dividedBy() parameter order
2015-06-04 21:45:13 +02:00
Benjamin Morel
908e73e8e4
unserialize() now throws an exception when called directly
...
This guarantees that immutability cannot be broken.
2015-06-04 12:14:42 +02:00
Benjamin Morel
53a61b46a7
Add BigDecimal::divideAndRemainder()
2015-06-02 22:08:56 +02:00
Benjamin Morel
9ab6358fc2
min() and max() now use variadics
2015-05-22 13:19:08 +02:00
Benjamin Morel
4d18be75e1
Tests now run a single calculator instance at a time
2015-01-27 17:38:31 +01:00
Benjamin Morel
09a4aa2895
Imposed a limit on the power() exponent
...
Just discovered that bcpow() on HHVM has a weird exponent limit of 2^27+1 (empirically determined), after which it triggers an "exponent too large in raise" error.
Anyway, an exponent of 1,000,000 is more than reasonable for most, if not all, use cases.
2014-09-01 18:38:00 +02:00
Benjamin Morel
d4a2a45f25
Fixed tests for HHVM with BCMath
2014-09-01 17:38:18 +02:00
Benjamin Morel
2b8ebcd55e
Changed tests namespace to Brick\Math\Tests
2014-08-31 14:24:10 +02:00
Benjamin Morel
5dfd5c45d0
Import from the incubator
2014-08-31 12:13:46 +00:00