@lzwme/asmd-calc
A short and concise JavaScript library for the four fundamental operations of arithmetic, which supports the addition, subtraction, multiplication and division calculation of floating-point precision.
Features
- Short and sharp. It only includes the calculation of addition, subtraction, multiplication and division. The core code is less than 100 lines. There is no other dependency.
- High execution performance. Only the four operations that can be accurately expressed by the front end are considered to realize simple logic and better execution performance than the open source library with rich and complex functions (see
Benchmark
for details). - Accurate and stable. The accumulation of many years of practical experience in the development of several financial trading systems covers various common calculation use case error scenarios.
Not Applicable
- For numerical processing involving very large numbers that front-end can not be accurately represented.
- Complex mathematical scientific calculation.
These libraries are recommended:
Install
# npm
npm i @lzwme/asmd-calc
# yarn
yarn add @lzwme/asmd-calc
# pnpm
pnpm add @lzwme/asmd-calc
Useage
1. Calculation example using simple tool method
es module
import { add } from '@lzwme/asmd-calc';
console.log(add(0.1, 0.2, 0.3));
// => 0.6
commonjs
const calc = require('@lzwme/asmd-calc');
console.log(calc.add(0.1, 0.2, 0.3));
// => 0.6
2. Calculation example using chain operation
es module
import { AsmdCalc } from '@lzwme/asmd-calc';
const a = new AsmdCalc(0);
console.log(+a.add(0.1).add(0.2, 0.3));
// => 0.6
const b = new AsmdCalc(0.3);
b.add(0.1, 0.2)
.add(0.1)
.sub(0.1, 0.2)
.sub(0.1)
.div(0.3)
.mul(0.3);
console.log(+b);
// => 0.3
console.log(b.value);
// => 0.3
commonjs
const AsmdCalc = require('@lzwme/asmd-calc').AsmdCalc;
const calc = new AsmdCalc(0);
console.log(calc.add(0.1).add(0.2, 0.3));
// => 0.6
API
-
add(...args);
- Addition -
sub(...args);
- Subtraction -
mul(...args);
- Multiplication -
div(...args);
- Division -
keepDotLength(value, len, isRounding = false): number;
- Keep N decimal places -
toFixed(value, len): string;
- Similar toNumber.prototype.toFixed
, but fixed precision of the result -
getDecimalLen(num): number;
- Get the decimal length -
toNonExponential(num): string;
- Convert to string format of unscientific counting method
Development and testing
- Development
pnpm install
pnpm start
- Testing
npm test
npm run benchmark
- Build
npm run build
Benchmark
npm run benchmark
See:Benchmark
The following results are the time-consuming comparison of executing 10000 * N
times on the same machine:
type/times | jsRaw | asmd-calc | mathjs |
---|---|---|---|
add-10000 | 19.225ms | 169.535ms | 415.145ms |
sub-10000 | 16.269ms | 34.827ms | 171.263ms |
mul-10000 | 18.518ms | 51.625ms | 235.868ms |
div-10000 | 27.025ms | 79.504ms | 300.706ms |
Pre execution of 1000000 times and then stats time-consuming of execution of 10000 * N
times:
type/times | jsRaw | asmd-calc | mathjs |
---|---|---|---|
add-10000 | 7.768ms | 155.836ms | 362.819ms |
sub-10000 | 8.339ms | 25.147ms | 155.611ms |
mul-10000 | 9.995ms | 35.685ms | 224.357ms |
div-10000 | 15.666ms | 77.407ms | 280.322ms |
References
- 754-2008 – IEEE Standard for Floating-Point Arithmetic
- Floating Point Math – https://0.30000000000000004.com
- 确保前端 JavaScript 浮点数精度的四则运算方法
License
@lzwme/asmd-calc
is released under the MIT license.
该插件由志文工作室开发和维护。