Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

davidmartinez10/bigfloat-esnext

Repository files navigation

BigFloat

A library for arbitrary precision decimal floating point arithmetic that can exactly represent all decimal fractions, unlike JavaScript's number data type which is 64-bit binary floating point.

Based on the original work by Douglas Crockford. This implementation is built upon ES native bigints.

This library provides three ways to make bigfloat operations:

  • A set of functions for a functional style approach
  • A BigFloat class with an API similar to that of Decimal.js
  • An evaluate() function that parses and resolves an expression

Basic usage

Functional style

import { make, string, sqrt } from "bigfloat-esnext";
string(sqrt(make("2"))); // "1.4142"

Class based

import { BigFloat } from "bigfloat-esnext";
new BigFloat("2").sqrt().toString(); // "1.4142"

The evaluate() function

evaluate(expression: string, precision?: number): string | boolean

The first argument can be any valid arithmetic or relational expression, including scientific e-notation. Precision should be a negative integer. Default is -4.

import { evaluate } from "bigfloat-esnext";
0.1 + 0.2 === 0.3; // false
evaluate("0.1 + 0.2 == 0.3"); // true
0.1 + 0.2; // 0.30000000000000004
evaluate("0.1 + 0.2"); // "0.3"
1 + Number.EPSILON / 2; // 1
evaluate(`1 + ${Number.EPSILON / 2}`); // "1.00000000000000011102230246251565"
evaluate("1 + 2.220446049250313e-16"); // "1.0000000000000002220446049250313"
evaluate(`4 >= ${Math.PI}`); // true

Valid tokens:

  • Parenthesis: (,)
  • Number: Decimal, integer or scientific e-notation
  • Operator: Arithmetic +,-,/,*,** Relational ===,==,!==,!=,<,>,<=,>=

Change precision

import { BigFloat, set_precision } from "bigfloat-esnext";
new BigFloat(2).sqrt().toString(); // "1.4142"
set_precision(-10);
new BigFloat(2).sqrt().toString(); // "1.4142135623"

The bigfloat object

interface IBigFloat {
 coefficient: bigint;
 exponent: number;
}

Valid bigfloat made from primitives:

const bigfloat: IBigFloat {
 coefficient: 522299n,
 exponent: -4
};

AltStyle によって変換されたページ (->オリジナル) /