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

interval-arithmetic

v1.1.2

Published

An implementation of an algebraically closed interval system of the extended real number set

Downloads

3,773

Readme

interval-arithmetic

NPM codecov js-standard-style

An implementation of an algebraically closed interval system of the extended real number set

Description

An interval is a pair of numbers which represents all the numbers between them, closed means that the bounds are also included in the representation, extended real because the real number system is extended with two elements: -∞ and +∞ representing negative infinity and positive infinity respectively.

The implementation is a modified port of the Boost's interval arithmetic library, the modifications are based on some guidelines from the following papers/presentations:

floating point operations

Floating point is a way to represent a real number in an approximate way (due to the finite space existing on a computer), most calculations with real numbers will produce quantities that cannot be exactly represented with the space allocated and therefore this operation needs to be rounded in order to fit back into its finite representation, such errors are described in more detail here

Interval arithmetic

Instead of using a single floating point number as an approximation of a real number, interval arithmetic represents the approximated value as a set of possible values (considering the numbers that floating point cannot represent), let's say we want to represent the number 1 / 3, as a single floating point number it's approximated as 0.333333333333..., in the end there will be some 333... decimals that will be lost due to the nature of floating point, instead we can represent this number with the interval [0.2, 0.4], with this interval we're completely sure that 1 / 3 is within the interval (although the interval is also representing many more numbers), to improve the scope of the interval we have to understand that numbers in JavaScript are represented with 64 bits, therefore to get the next floating point number of a single precision number the last bit needs to be incremented to get the upper bound, and the last bit also needs to be decremented to get the lower point

Notable modifications

  • next/previous IEEE754 floating point number implementation based on Typed Arrays
  • division when both intervals contain zero creates a whole interval
  • cosine, tangent works with positive/negative values out of the box

Interval arithmetic evaluator

Due to the expressive nature of the way the methods interact with intervals it's sad that even the simplest operation needs a lot of characters to be typed, let's consider evaluating the result of 1 + 2 expressed with intervals

Interval.add(new Interval(1, 1), new Interval(2, 2))

This gets worse when the expression to be evaluated becomes complex like sin(exp(x)) + tan(x) - 1/cos(PI) * [1, 3]^2:

const x = Interval(0, 1);
Interval.add(
  Interval.sin(Interval.exp(x)),
  Interval.sub(
    Interval.tan(x),
    Interval.mul(
      Interval.div(Interval.ONE, Interval.cos(Interval.PI)),
      Interval.pow(Interval(1, 3), 2)
    )
  )
);

To avoid this 'expressiveness' mess there's an interval arithmetic evaluator module which I've created to deal with all the work of parsing/evaluating expressions like the one above

const compile = require('interval-arithmetic-eval');
compile('sin(exp(x)) + tan(x) - 1/cos(PI) * [1, 3]^2').eval({ x: [0, 1] })

Installation & Usage

$ npm install --save interval-arithmetic
import Interval from 'interval-arithmetic'
Interval.add(Interval(1), Interval(2))

API

See the homepage

Development

npm test

Deployment steps

// after the working directory is clean
npm test
npm run build
npm version (major|minor|patch)
git push origin master

// if everything went well
npm publish
npm run deploy

2015-2022 © Mauricio Poppe

License

FOSSA Status