Releases: ionspin/kotlin-multiplatform-bignum
Releases · ionspin/kotlin-multiplatform-bignum
0.1.2 Performance improvements
- Implemented handling of additional empty words which improved speed and number of allocations.
- Implemented square-and-multiply exponentiation algorithm instead of naive approach.
Multiplication improvements
- Implemented Toom-Cook-3 multiplication, although still slow because of inefficient division
- Bumped gradle version to 5.6.1, which means that the published Gradle Metadata will be 1.0, making
metadata resolution available only on Gradle >= 5.3 - Fixed several issues related to big decimal comparison, modular integer sign, etc.
- Added more BigDecimal extension functions
- Added ModularBigInteger extension functions
- Added Karatsuba multiplication
- Added
copy
andmoveDecimalPoint
methods - Added
fromUByteArray
andtoUByteArray
0.1.0
- Added toByteArray and fromByteArray
- Added toFloat and toDouble to BigInteger and ModularBigInteger classes
- Added BigInteger creation from Float and Double by using
tryFromFloat
andtryFromDouble
, with optional exact
parameter to preserve precision. - Added BigInteger comparison with Float and Double
- Added BigDecimal configuration option to switch to expanded representation instead of scientific when calling
toString()
- Improved ModularBigInteger exponentiation algorithm, based on Bruce Schneier Applied Cryptography pesudocode
0.0.9
- Added modular integers - ModularBigInteger
- Added modInverse method to BigInteger
- Extracted interfaces that model big numbers better (BigNumber interface and accompanying interfaces)
- Implemented integer reciprocal based on newton iteration (Based on paper by Yiping Cheng, Ze Lie : Refinement of a newton reciprocal algorithm for arbitrary precision numbers)
- Implemented division by reciprocal multiplication. Not used by division at the moment as it is unoptimized and slower than basecase division in early benchmarks.
- Fixed a bug in Int32 shift right when shift amount was an exact multiple of word size
- Added constructor overloads
- Added value methods (intValue, longValue...)
- Renamed invPrecise() bigInteger method to not()
- Renamed numberOfDigits() to numberOfDecimalDigits()
- Introduced BigNumber and BitwiseOperations interfaces
- Added iOS ARM 32bit support
Also added missing methods to BigInteger, so BigDecimal and BigInteger are mostly on par with their Java counterpart, in regards to functionality.
Adding macos built artifcats
This release doesn't bring any new functionality except for a full release of both linux (already present in 0.0.7) built and macos (new in 0.0.8) built artifacts (iosX64, iosArm, macosX64)
From this release forward snapshot releases will be published as well.
Initial GitHub release
Since this is first GitHub release, well list everything that 0.0.7 has so far:
- BigInteger support
- BigDecimal support
Known issues:
- Library should be relatively slow, because it doesn't yet have optimized algorithms such as Karatsuba, etc.
- Square root is not implemented (so not on par with Java BigInteger and BigDecimal)
- Greatest common divisor is not implemented (same as square root)