cmath-js
v4.0.0
Published
C's and C++'s math functions in TypeScript & JavaScript
Downloads
202
Maintainers
Readme
cmath-js
Implementation of parts of C's & C++'s numerics libraries in TypeScript/JavaScript.
Floating-point functions
Integer functions
These functions accept either a bigint
or an integer number
:
abs
countl_one
ascreate_countl_one
, which is used this way:import { create_countl_one } from "cmath-js"; const countl_one_u16 = create_countl_one({ bits: 16 }); const integer = 0xF0_00; // Prints "1111000000000000 has 4 leading zero bits." console.log(`${integer.toString(2).padStart(16, "0")} has ${countl_one_u16(integer)} leading one bits.`);
countl_zero
ascreate_countl_zero
countr_one
ascreate_countr_one
countr_zero
ascreate_countr_zero
div
gcd
. Example:import { gcd } from "cmath-js"; // Prints "The greatest common divisor of 24 and 32 is 8." console.log(`The greatest common divisor of 24 and 32 is ${gcd(24, 32)}.`);
lcm
popcount
Functions for both floats and ints
Mathematical constants
- Constants in the
std::numbers
namespace are available from thenumbers.js
subpath export. Example:import { sqrt3 } from "cmath-js/numbers.js"; console.log(`The square root of 3 is ${sqrt3}.`);
Test coverage
The test coverage is a perfect 100% and enforced by the publishing and pull request verification workflows.
Contributing
Contributions are welcomed! Feel free to make a pull request. Please add your name to contributors
in package.json
and run npm run build-and-verify
before submitting your PR. By making a pull request you agree to license your contribution under the CC0 license unless otherwise specified.
ESLint is used to enforce code quality and consistent formatting (with the help of Prettier). If ESLint complains when you run npm run build-and-verify
, you can run npm run lint-fix
to apply automatic fixes and then fix the rest of the errors manually. I recommend configuring your IDE for ESLint and Prettier. If you are using Visual Studio Code, simply installing Microsoft's ESLint extension and the official Prettier extension takes care of that.