arithmetica

is an implementation of arithmetic operators for Rational numbers

A RationalNumber is any number that can be expressed by a fraction. It is represented by a string, for example:

Installation

With npm do

npm install arithmetica

Usage

import { add } from "arithmetica";

console.log(add("0.1", "0.2")); // '0.3'

There is no runtime check on types: consumers are responsible to feed inputs that are actual RationalNumber types, for instance using isRationalNumber type-guard.

API

eq

eq(a: RationalNumber, b: RationalNumber): boolean

Implements equality.

eq("1", "2"); // false
eq("42", "42.0"); // false

add

add(a: RationalNumber, b: RationalNumber): RationalNumber

Implements addition.

sub

sub(a: RationalNumber, b: RationalNumber): RationalNumber

Implements subtraction.

mul

mul(a: RationalNumber, b: RationalNumber): RationalNumber

Implements multiplication.

div

div(a: RationalNumber, b: RationalNumber): RationalNumber

Implements division. It throws RangeError if denominator is zero.

console.log(div("-10", "2")); // '-5'

try {
  console.log(div("2", "0");
} catch (err) {
  console.error(err); // RangeError: Division by zero
}

isRationalNumber

isRationalNumber(arg: unknown): arg is RationalNumber

Use isRationalNumber type-guard to check if some variable has RationalNumber data type.

import { isRationalNumber, sub } from "arithmetica";

function minusOne (a: string): RationalNumber {
  if (isRationalNumber(a)) return sub(a, "1");
  throw new TypeError(`Argument is not a RationalNumber ${a}`);
}

Of course it can be used also on an ECMAScript runtime.

import { isRationalNumber, mul } from "arithmetica";

function timesTen (a) {
  if (isRationalNumber(a)) return mul(a, "10");
  throw new TypeError(`Argument is not a RationalNumber ${a}`);
}

rationalNumberToFloat

rationalNumberToFloat(rationalNumber: RationalNumber, mantissaLength: number): number

Convert a RationalNumber to a floating point number.

rationalNumberToFloat("42.0", 0); // 42
rationalNumberToFloat("1234.56789", 2); // 1234.57

License

MIT