bigint-fraction
TypeScript icon, indicating that this package has built-in type declarations

1.0.6 • Public • Published

bigint-fraction license npm

coverage dependency maintenance quality

bigint-fraction - Fraction composed of bigint

CI Status

Target Status
Build GitHub (Build)
CodeQL GitHub (CodeQL)
Coverage GitHub (Coverage)

Installation

npm i bigint-fraction

Usage

Example usage as below,

import { Fraction, Irreducible } from 'bigint-fraction'

const a = new Fraction() // initialize 'a' as zero
const b = new Fraction(0) // also initialize 'b' as zero
const c = new Fraction(1, 4) // initialize 'c' with 1/4

a.add(3) // add 3 to 'a', then 'a' is equal to 3
b.subtract(1, 2) // subtract 1/2 from 'b', then 'b' is equal to -1/2
c.add(1, 2) // add 1/2 to 'c', then 'c' is equal to 3/4

a.add(b) // add 'b' to 'a', then 'a' is equal to 5/2
a.subtract(c) // subtract 'c' from 'a', then 'a' is equal to 7/4

a.multiply(4) // mutiply 4 to 'a', then 'a' is equal to 7

const d = new Fraction(4, 6) // initialize 'd' as 4/6, this is reducible
const result = d.reduce((gcd: bigint) => { // reduce 'd'
  assert(gcd === 2n) // greatest common divisor is expected to equal to 2
  return 12345
})
if (result instanceof Irreducible)
  throw new Error('never reach here')
assert(result === 12345)

const maybePI = d.reduce((gcd: bigint) => { // reduce 'd' again
  assert(false) // this callback has never been called
  return Math.PI
})
if (maybePI instanceof Irreducible)
  console.log(`yes, 'd' has been already reduced`) // this message will be shown
else
  console.log('this message could have never been shown')

async/await is also available as below,

import { Fraction } from 'bigint-fraction'

async function doSomething(a: Fraction, b: Fraction, c: Fraction): Promise<void> => {
  await a.addAsync(11, 8) // simply add 11/8 to 'a' asynchronously

  const d = new Fraction(32, 48)
  const hasBeenReduced = await d.reduceAsync((gcd: bigint) => { // reduce 32/48 asynchronously
    console.log({ greatest_common_divisor: gcd })
    return `yes, ${d.denominator}/${d.numerator} is reduced by ${gcd}`
  })
  assert(hasBeenReduced === 'yes, 32/48 is reduced by 16')
  assert(d.numerator === 2n)
  assert(d.denominator === 3n)

  await Promise.all([ // evaluate multiple expressions concurrently
    b.divideAsync(c),
    a.multiplyAsync(3141592653589793238462643383279n, 5028841971693993751058209749445923n),
    d.subtractAsync(c),
  ])
}

Package Sidebar

Install

npm i bigint-fraction

Weekly Downloads

11

Version

1.0.6

License

BSD-3-Clause

Unpacked Size

28.6 kB

Total Files

8

Last publish

Collaborators

  • kei-g