Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ttulka/as-big
AssemblyScript library for arbitrary-precision decimal arithmetic
https://github.com/ttulka/as-big
assemblyscript big bigdecimal bigfloat bignumber decimal float math numer precision
Last synced: 13 days ago
JSON representation
AssemblyScript library for arbitrary-precision decimal arithmetic
- Host: GitHub
- URL: https://github.com/ttulka/as-big
- Owner: ttulka
- License: mit
- Created: 2021-03-07T14:49:20.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-12-11T15:26:18.000Z (11 months ago)
- Last Synced: 2024-10-20T09:15:00.513Z (20 days ago)
- Topics: assemblyscript, big, bigdecimal, bigfloat, bignumber, decimal, float, math, numer, precision
- Language: JavaScript
- Homepage:
- Size: 688 KB
- Stars: 38
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-assemblyscript - ttulka/as-big - Arbitrary precision big numbers (Packages)
README
# as-big
[AssemblyScript](https://github.com/AssemblyScript/assemblyscript) library for arbitrary-precision decimal arithmetic 🚀
## Install
```sh
npm install as-big
```## Use
```typescript
import Big from "as-big";let r = Big.of(0.1) + Big.of(0.2); // Big(0.3)
let x = Big.of(42);
let y = Big.of("13");let a = x + y; // Big(55)
a = x.plus(13); // Big(55)let a0 = a.prec(1); // Big(60)
let aNum = a.toNumber() + 1; // 56
let aStr = a.toString(); // "55"let c = a0 + Big.TEN / Big.TWO; // Big(65)
```### Builders
- `Big.of(n)` returns a `Big` instance, where
- `n` is either another `Big` instance, string, or number
- `Big.copyOf(x)` creates a copy from a `Big` instance, where
- `x` is the `Big` instance to copy### Operations
#### Arithmetic
- **plus** (addition): `x + y` or `x.plus(y)`
- **minus** (substraction): `x - y` or `x.minus(y)`
- **times** (multiplication): `x * y` or `y.times(y)`
- **div** (division): `x / y` or `x.div(y)`
- **mod** (modulo): `x % y` or `x.mod(y)`
- **pow** (power): `x ^ n` or `x.pow(n)`, where `n` is `i32`
- **sqrt** (square root): `x.sqrt()`#### Comparison
- **cmp** (compare): `x.cmp(y)` returns
- `1` if the value of `x` is greater than the value of `y`,
- `-1` if the value of `x` is less than the value of `y`, or
- `0` if they have the same value.
- **eq** (equals): `x == y` or `x.eq(y)`
- **neq** (not equals): `x != y` or `x.neq(y)`
- **gt** (greater than): `x < y` or `x.gt(y)`
- **gte** (greater than or equals): `x <= y` or `x.gte(y)`
- **lt** (less than): `x > y` or `x.lt(y)`
- **lte** (less than or equals): `x >= y` or `x.lte(y)`#### Value
- **abs** (absolute value): `x.abs()`
- **neg** (negative value): `-x` or `x.neg()`
- **pos** (this value): `+x` or `x.pos()`
- **round** (rounded value): `x.round(dp, rm)` where
- `dp` is the maximum of decimal places, and
- `rm` is the rounding mode (`0`, `1`, `2`, `3`)
- `0` (down), `1` (half-up), `2` (half-even) or `3` (up)
- **prec** (value rounded to precision): `x.prec(sd, rm)` where
- `sd` is the maximum of significant digits, and
- `rm` is the rounding mode (`0`, `1`, `2`, `3`)
- `0` (down), `1` (half-up), `2` (half-even) or `3` (up)#### Converters
- `toString` (string representation): `let s: string = x.toString()`
- `toNumber` (`f64` represenation): `let n: f64 = x.toNumber()`
- `toExponential` (string represenation): `let s: string = x.toExponential()`### Static Constants
- `Big.ZERO`: a `Big` instance with the value zero `0`
- `Big.ONE`: a `Big` instance with the value one `1`
- `Big.TWO`: a `Big` instance with the value two `2`
- `Big.TEN`: a `Big` instance with the value ten `10`
- `Big.HALF`: a `Big` instance with the value one half `0.5`### Global Settings
- `Big.DP`: the maximum number of decimal places of the results of operations involving division (default: `20`)
- `Big.RM`: the rounding mode used when rounding to the above decimal places (default: `1`)- `Big.PE`: the positive exponent at and above which `toString` returns exponential notation (default: `21`)
- `Big.NE`: the negative exponent at and beneath which `toString` returns exponential notation (default: `-7`)## Examples
There is a collection of examples in the [`examples`](https://github.com/ttulka/as-big/tree/main/examples/assembly) directory.
## Build
The `assembly` directory contains AS source code.
```sh
npm i
npm run asbuild
```## Test
The `tests` directory contains all unit tests.
Run all the tests:
```sh
npm test
```Test a single method:
```sh
node tests/
```## License
[MIT](https://github.com/ttulka/as-big/blob/main/LICENSE)