npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

bigint-fraction

v1.0.6

Published

Fraction composed of bigint

Downloads

58

Readme

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),
  ])
}