This is a library for working with numbers of arbitrarily finite size.
Install precise
with Spago:
spago install precise
JavaScript (and to some extension PureScript) has quite a few drawbacks when it comes to large numbers. For example, PureScript's Int
primitive is a member of the Bounded
typeclass, with top == 2 ^ 31 - 1
and bottom == - (2 ^ 32)
.
The PureScript Number
primitive is not Bounded
in the same way; however, there are problems with manipulating large-enough Number
s:
> import Prelude
> let x = 900000000000000000.0
> :t x
Number
> x + 1.0 == x
true
> x + 1.0
900000000000000000
In this library, correctness is prioritized above all else:
> import Data.HugeNum
> let x = fromNumber 900000000000000000.0
> let y = fromNumber 1.0
> x + y == x
false
> x + y
HugeNum 900000000000000001.0
Addition is implemented using an elementary-school method. Multiplication follows Karatsuba.
precise
documentation is stored in a few places:
- Module documentation is published on Pursuit.
- Written documentation is kept in the docs directory.
- Usage examples can be found in the test suite.
If you get stuck, there are several ways to get help:
- Open an issue if you have encountered a bug or problem.
- Ask general questions on the PureScript Discourse forum or the PureScript Discord chat.
You can contribute to precise
in several ways:
-
If you encounter a problem or have a question, please open an issue. We'll do our best to work with you to resolve or answer it.
-
If you would like to contribute code, tests, or documentation, please read the contributor guide. It's a short, helpful introduction to contributing to this library, including development instructions.
-
If you have written a library, tutorial, guide, or other resource based on this package, please share it on the PureScript Discourse! Writing libraries and learning resources are a great way to help this library succeed.