Douglas Crockford

Blog

Books

Videos

2024 Appearances

JavaScript

Misty

JSLint

JSON

Github

Electric Communities

Mastodon/Layer8

Flickr Photo Album

ResearchGate

LinkedIn

Pronouns: pe/per

About

big_integer

For my book, How JavaScript Works, I created a module, big_integer.js, that makes and performs operations on integers of any size. Since then, the ECMAScript standard has acquired a BigInt type, which, being native, can run faster and consume less memory. I have revised big_integer.js to use BigInt as its underlying implementation.

I also created two other modules, big_float.js and big_rational.js. The big_float.js module uses big_integer.js to implement decimal floating point, similar to DEC64 but with virtually unlimited range and resolution. It benefits significantly from the big_integer.js speed up. Decimal floating point is much better than the binary floating point that JavaScript provides because it can exactly represent decimal fractions, including money. The big_float.js module can exactly represent every value that binary floating point can, but binary floating point can not exactly represent 0.01. The world should stop using binary floating point.

The big_rational.js module can exactly represent everything that big_float.js can, and can also exactly represent virtually all rational fractions, starting with 1/3. Rational arithmetic is truly awesome, but there is a potential problem: The numerators and denominators can grow quickly in some computations, creating a big performance problem. So for most purposes, decimal floating point suffices. But if you want to make the world's best, most accurate calculator, nothing is better than big rationals.

I am also releasing the tests for those modules. The tests demonstrate the use of JSCheck.