Package

purescript-precise

Repository
purescript-contrib/purescript-precise
License
MIT
Uploaded by
JordanMartinez
Published on
2022-04-27T22:41:59Z

CI Release Pursuit Maintainer: garyb

This is a library for working with numbers of arbitrarily finite size.

Installation

Install precise with Spago:

spago install precise

Quick start

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 Numbers:

> 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.

Documentation

precise documentation is stored in a few places:

  1. Module documentation is published on Pursuit.
  2. Written documentation is kept in the docs directory.
  3. Usage examples can be found in the test suite.

If you get stuck, there are several ways to get help:

Contributing

You can contribute to precise in several ways:

  1. 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.

  2. 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.

  3. 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.