1
0
mirror of https://github.com/danog/math.git synced 2024-11-26 20:04:46 +01:00
Commit Graph

65 Commits

Author SHA1 Message Date
Daniil Gentili
b2a3499218 Fixed mistakes in sqrt and its test 2016-07-30 00:54:56 +02:00
danogentili
e2a4969440 Added sqrt function and tests for it. Also added two() function to return a BigInteger of value 2. 2016-07-29 21:19:51 +02:00
Benjamin Morel
859ea90439 Fix incorrect optimization in dividedBy() - fixes #6 2016-03-31 18:54:32 +02:00
Benjamin Morel
08c6979c62 BigDecimal::dividedBy()'s $scale parameter is optional again 2015-08-06 13:04:27 +02:00
Benjamin Morel
c1bdb3b9b5 Add BigNumber::toScale()
This allows to convert any BigNumber to a BigDecimal of the given scale.
2015-07-05 13:07:10 +02:00
Benjamin Morel
ef3e3b6ea7 Add negative tests for BigRational::toBigDecimal() 2015-07-04 13:40:42 +02:00
Benjamin Morel
f2f4f8d451 Remove BigRational::isFiniteDecimal()
This information can now be inferred by calling toBigDecimal() and catching the exception.
2015-07-04 13:35:15 +02:00
Benjamin Morel
aa43c637b7 Re-introduce rounding mode in BigInteger::dividedBy() 2015-07-04 01:35:02 +02:00
Benjamin Morel
640af2b413 Remove abstract operators from BigNumber, rename divide methods in BigDecimal
It turned out that there was no value in having a generic interface for operations, when every concrete class could really only accept instances of itself, and more importantly, would only return instances of itself. This was also a problem for division, that cannot be handled in the same way for BigInteger, BigDecimal and BigRational.

Methods changed in BigDecimal:

- dividedBy() is now exactlyDividedBy(), and always calculates the scale automatically
- dividedToScale() is now dividedBy(), and does not not make any assumption on the scale any more
2015-07-04 01:26:05 +02:00
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
050329ca23 Add quotient and remainder methods to BigRational 2015-07-03 13:32:13 +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
7eeb9d3ca0 Parameters to BigNumber methods must be convertible to the current type
This applies to plus(), minus(), multipliedBy(), dividedBy().
2015-06-28 01:40:03 +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
d0a91c6be1 Add missing BigInteger tests 2015-06-26 13:41:47 +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
c343e0aeb9 Merge of() factory methods in BigNumber 2015-06-22 12:50:44 +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
65d4dd75d6 Rename BigRational factory methods
- `BigRational::parse()` is now `of()`
- `BigRational::of()` is now `nd()`

This keeps BigRational in line with BigInteger and BigDecimal, whose `of()` factory method accepts a single parameter.
The new way to create a BigRational from two numbers is now called `nd()` for numerator/denominator.
2015-06-21 14:48:26 +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
12bea2c474 BigInteger::toString() is now toBase() 2015-06-21 14:21:28 +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
8f296871f2 Add BigRational::toBigDecimal() 2015-06-20 00:36:01 +02:00
Benjamin Morel
7ef1c1fa0d isFiniteDecimal() tests for negative values 2015-06-19 14:19:48 +02:00
Benjamin Morel
c9a518affc Add BigRational::isFiniteDecimal() 2015-06-19 14:10:31 +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
095ae53a9b BigRational now implements Serializable
This allows for a more compact serialized representation.
2015-06-12 23:35:34 +02:00
Benjamin Morel
b1239d9f44 Add tests for lines not covered 2015-06-12 23:07:22 +02:00
Benjamin Morel
38e7c83089 Add a BigRational class to deal with fractions 2015-06-12 15:49:35 +02:00
Benjamin Morel
cc30889769 BigInteger::dividedBy() now always returns the quotient
Rounding is a concept left to BigDecimal only from now on.
2015-06-12 10:25:00 +00:00
Benjamin Morel
115455238b Clean up unused imports 2015-06-12 01:20:44 +02:00
Benjamin Morel
0dcae82742 Remove useless of() call in tests 2015-06-12 01:17:42 +02:00
Benjamin Morel
4f4b9531ed Add BigInteger::gcd()
This computes the greatest common divisor of two large integers.
2015-06-11 23:35:47 +02:00
Benjamin Morel
1f577afe11 Add BigInteger::remainder() method
This allows to return the remainder of the division only.
2015-06-11 22:31:07 +02:00