Tiny 2kb, zero deps, infinite precision: SafeBase for all your big integer + big decimal needs.
SafeBase is a Lightweight
, Zero Dependency
JavaScript library for safe and precise arithmetic operations on Big Integer
+ Big Decimal
. It excels at handling both Big Decimal and Big Integer computations with ease. 🧮
- 🔢 Complete Big Number Suite: Basic arithmetic (add, subtract, multiply, divide, abs)
- 📊 Advanced Comparisons: compare, min, max, equality checks
- 🔄 Rounding Operations: floor, ceil, round, truncate with custom precision
- ⚡ Power Operations: exponentiation, square root, nth root calculations
- 🧮 Modular Arithmetic: mod, gcd, lcm with proper mathematical semantics
- 🎲 Combinatorics: factorial, combinations, permutations for large numbers
- 🔒 Zero Dependencies: Pure string-based implementation, no external libraries
- 🪶 Lightweight: Only 2kb in size
- 💻 Full TypeScript Support: Complete type definitions included
- 🎯 Infinite Precision: Handle arbitrarily large integers and precise decimals
- 🔀 Seamless Integration: Works with both Big Decimal and Big Number operations
npm install safebase
import { add, subtract, multiply, divide } from "safebase";
console.log(add("10000000000000000000000", "0.00000000005"));
// '10000000000000000000000.00000000005'
console.log(subtract("-9999999999999999999999.9", "0.1"));
// '-10000000000000000000000'
console.log(multiply("123456789123456789", "0.000000001"));
// '123456789.123456789'
console.log(divide("1000000000000000000000", "0.1"));
// '10000000000000000000000'
import {
compare, min, max, floor, ceil, round,
pow, sqrt, nthRoot, mod, gcd, lcm, factorial
} from "safebase";
// Comparison operations
console.log(compare("123.456", "123.457")); // -1 (less than)
console.log(min("999999999999999999999", "1000000000000000000000")); // '999999999999999999999'
console.log(max("5.67", "5.68", "5.69")); // '5.69'
// Rounding operations
console.log(floor("5.99")); // '5'
console.log(ceil("5.01")); // '6'
console.log(round("5.5")); // '6'
// Power operations
console.log(pow("2", "100")); // '1267650600228229401496703205376'
console.log(sqrt("2")); // '1.41421356237309504880'
console.log(nthRoot("27", "3")); // '3'
// Modular arithmetic
console.log(mod("17", "5")); // '2'
console.log(gcd("48", "18")); // '6'
console.log(lcm("12", "18")); // '36'
// Factorial and combinatorics
console.log(factorial("10")); // '3628800'
Adds two numbers represented as strings.
Subtracts the second number from the first, both represented as strings.
Multiplies two numbers represented as strings.
Divides the first number by the second, both represented as strings. The precision
parameter determines the number of decimal places in the result (default is 20).
Returns the absolute value of a number.
Compares two numbers. Returns:
1
if a > b-1
if a < b0
if a == b
Checks if two numbers are equal.
Checks if the first number is greater than the second.
Checks if the first number is less than the second.
Returns the smallest number from the given arguments.
Returns the largest number from the given arguments.
Rounds down to the nearest integer (towards negative infinity).
Rounds up to the nearest integer (towards positive infinity).
Rounds to the nearest integer using "round half up" strategy.
Removes the fractional part (rounds towards zero).
Rounds to the specified number of decimal places.
Raises a number to an integer power. Supports negative exponents.
Calculates the square root of a number using Newton's method.
Calculates the nth root of a number. The n
parameter must be a positive integer.
Mathematical modulo operation. The result always has the same sign as the divisor.
Programming remainder operation. The result has the same sign as the dividend.
Calculates the Greatest Common Divisor using the Euclidean algorithm.
Calculates the Least Common Multiple using the formula: lcm(a,b) = |a×b| / gcd(a,b).
Calculates the factorial of a non-negative integer (n!).
Calculates the number of ways to choose r items from n items (nCr).
Calculates the number of ways to arrange r items from n items (nPr).
JavaScript's native number type has limitations when dealing with very large numbers or high precision decimals. SafeBase overcomes these limitations by:
- 🔢 Representing numbers as strings, allowing for arbitrary-length integers
- 🎯 Providing high-precision decimal arithmetic
- 🐛 Avoiding floating-point errors common in JavaScript's native math operations
SafeBase is optimized for performance while maintaining accuracy. It's suitable for applications requiring precise calculations with large numbers, such as financial systems, scientific computing, or cryptography.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
- Thanks to all contributors who have helped shape SafeBase
- Inspired by the need for reliable big number arithmetic in JavaScript