Socket
Socket
Sign inDemoInstall

fraction.js

Package Overview
Dependencies
Maintainers
1
Versions
53
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fraction.js - npm Package Compare versions

Comparing version 1.6.0 to 1.7.0

2

bower.json
{
"name": "fraction.js",
"main": "fraction.js",
"version": "1.6.0",
"version": "1.7.0",
"homepage": "http://www.xarg.org/2014/03/precise-calculations-in-javascript/",

@@ -6,0 +6,0 @@ "description": "A rational number library",

/**
* @license Fraction.js v1.6.0 14/02/2015
* @license Fraction.js v1.7.0 25/03/2015
* http://www.xarg.org/2014/03/precise-calculations-in-javascript/

@@ -41,2 +41,4 @@ *

"use strict";
// Parsed data to avoid calling "new" all the time

@@ -181,2 +183,14 @@ var P = {

/**
* Calculates the fractional gcd of two rational numbers
*
* Ex: new Fraction(5,8).gcd(3,7) => 1/56
*/
self['gcd'] = function() {
parse(arguments);
return cancel(gcd(P['n'], self['n']), P['d'] * self['d'] / gcd(P['d'], self['d']));
};
function round(round) {

@@ -235,6 +249,18 @@

return P['s'] * P['n'] * self['d'] === self['s'] * self['n'] * P['d'];
return self['s'] * self['n'] * P['d'] === P['s'] * P['n'] * self['d']; // Same as compare() === 0
};
/**
* Check if two rational numbers are the same
*
* Ex: new Fraction(19.6).equals([98, 5]);
**/
self['compare'] = function() {
parse(arguments);
return (self['s'] * self['n'] * P['d'] - P['s'] * P['n'] * self['d']);
};
/**
* Check if two rational numbers are divisible

@@ -455,3 +481,3 @@ *

if (B > N) {
if (B > N) {
n = C;

@@ -471,2 +497,10 @@ d = D;

M = param.split("/");
if (M.length === 2) {
n = s = parseInt(M[0], 10);
d = parseInt(M[1], 10);
break;
}
M = param.split("");

@@ -560,13 +594,6 @@

d = Math.abs(d);
s = gcd(d, n); // Abuse var s
var a = n, b = d, t;
while (b) {
t = b;
b = a % b;
a = t;
}
dest['n'] = n / a;
dest['d'] = d / a;
dest['n'] = n / s;
dest['d'] = d / s;
};

@@ -602,3 +629,3 @@

for (var t = 1; t <= 10000; t++) {
for (var t = 1; t < 2000; t++) { // If you expect numbers longer then 2k chars repeating, increase the 2000
// Solve 10^t == 1 (mod d) for d != 0 (mod 2, 5)

@@ -635,2 +662,12 @@ // http://mathworld.wolfram.com/FullReptendPrime.html

var gcd = function(a, b) {
var t;
while (b) {
t = a;
a = b;
b = t % b;
}
return a;
};
parse(arguments);

@@ -637,0 +674,0 @@

/*
Fraction.js v1.6.0 14/02/2015
Fraction.js v1.7.0 25/03/2015
http://www.xarg.org/2014/03/precise-calculations-in-javascript/

@@ -8,8 +8,8 @@

*/
function Fraction(){function q(a,c){if(0===c%2)return q(a,c/2);if(0===c%5)return q(a,c/5);for(var d=1;1E4>=d;d++)if(1===r(d,c))return d;return 0}function r(a,c){for(var d=10,e=1;0<a;d=d*d%c,a>>=1)a&1&&(e=e*d%c);return e}function p(v,c){w(a,v,v,c);return a}function w(a,c,d,e){if(!e)throw"DIV/0";a.s=(0<=c)-(0>c);d=Math.abs(d);e=Math.abs(e);c=d;for(var f=e,b;f;)b=f,f=c%f,c=b;a.n=d/c;a.d=e/c}function m(a){var c=0,d=1,e=1,f=0,k=1,h=1,g=1,l=1,n=0;if(1===a.length)a=a[0];else if(2!==a.length)throw"Wrong Parameter";
switch(typeof a){case "object":if(null!==a)if("d"in a&&"n"in a)c=a.n,d=a.d,e=c*d,"s"in a&&(e*=a.s);else if(0 in a)c=a[0],1 in a&&(d=a[1]),e=c*d;else throw"Unknown format";break;case "number":0>a&&(a=-a,e=-1);if(0<a){1<=a&&(l=Math.pow(10,Math.floor(1+Math.log(a)/Math.LN10)),a/=l);for(;1E7>=k&&1E7>=g;)if(c=(f+h)/(k+g),a===c){1E7>=k+g?(c=f+h,d=k+g):g>k?(c=h,d=g):(c=f,d=k);break}else a>c?(f+=h,k+=g):(h+=f,g+=k),1E7<k?(c=h,d=g):(c=f,d=k);c*=l}break;case "string":c=a.split("");f=[0,0,0,0,0];k=[0,0,0,0,
0];for(g=0;g<c.length;g++)if(h=c[g],"."===h)if(0===n)n++;else break;else if("("===h||"'"===h||")"===h)if(0<n&&3>n)n++;else break;else if(0!==g||"+"!==h)if(0===g&&"-"===h)e=-1;else if(3>n&&!isNaN(h=parseInt(h,10)))f[n]=10*f[n]+h,k[n]++;else break;if(2===n||g<c.length)throw"Corrupted number";f[3]=Math.pow(10,k[1]);f[4]=0<f[2]?Math.pow(10,k[2])-1:1;c=f[2]+f[4]*(f[0]*f[3]+f[1]);d=f[3]*f[4];break;default:throw"Unknown type";}w(b,e,c,d)}function t(b){return function(){0===(a.n=Math.abs(b(a.s*a.n/a.d)))&&
(a.s=0);a.d=1;return a}}var b={n:0,d:0,s:0},a=this;a.abs=function(){a.s=1;return a};a.add=function(){m(arguments);return p(a.s*a.n*b.d+b.s*a.d*b.n,a.d*b.d)};a.sub=function(){m(arguments);return p(a.s*a.n*b.d-b.s*a.d*b.n,a.d*b.d)};a.mul=function(){m(arguments);return p(a.s*b.s*a.n*b.n,a.d*b.d)};a.div=function(){m(arguments);return p(a.s*b.s*a.n*b.d,a.d*b.n)};a.clone=function(){return new Fraction(this)};a.set=function(){m(arguments);return p(b.s*b.n,b.d)};a.mod=function(){m(arguments);return 0===b.n*a.d?
p(0,0):p(a.s*b.d*a.n%(b.n*a.d),b.d*a.d)};a.ceil=t(Math.ceil);a.floor=t(Math.floor);a.round=t(Math.round);a.reciprocal=function(){return p(a.s*a.d,a.n)};a.equals=function(){m(arguments);return b.s*b.n*a.d===a.s*a.n*b.d};a.divisible=function(){m(arguments);return!!(b.n*a.d)&&!(a.n*b.d%(b.n*a.d))};a.toNumber=function(){return a.s*a.n/a.d};a.toFraction=function(){var b=a.n%a.d;return a.n>a.d?0===a.n%a.d?""+a.s*a.n/a.d:a.s*(a.n-b)/a.d+" "+b+"/"+a.d:a.s*a.n+"/"+a.d};a.toLatex=function(){var b="";0>a.s&&
(b+="-");1===a.d?b+=a.n:(b=b+"\frac{"+a.n,b+="}{",b+=a.d,b+="}");return b};a.toString=function(){var b=String(a.n).split(""),c=a.d,d=0,e=[~a.s?"":"-","",""],f="",k=q(a.n,a.d),h;a:{h=a.d;for(var g=0;300>g;g++)if(r(g,h)===r(g+k,h)){h=g;break a}h=0}for(var g=-1,l=1,n=10+k+h+b.length,m=0;m<n;m++,d*=10){m<b.length?d+=Number(b[m]):(l=2,g++);if(0<k)if(g===h)e[l]+=f+"(",f="";else if(g===k+h){e[l]+=f+")";break}d>=c?(e[l]+=f+(d/c|0),f="",d%=c):1<l?f+="0":e[l]&&(e[l]+="0")}e[0]+=e[1]||"0";return e[2]?e[0]+"."+
e[2]:e[0]};m(arguments);a.s=b.s;a.n=b.n;a.d=b.d}"undefined"!==typeof module&&module.exports&&(module.exports=Fraction);
function Fraction(){"use strict";function q(a,d){for(var c;d;)c=a,a=d,d=c%d;return a}function r(a,d){if(0===d%2)return r(a,d/2);if(0===d%5)return r(a,d/5);for(var c=1;2E3>c;c++)if(1===t(c,d))return c;return 0}function t(a,d){for(var c=10,b=1;0<a;c=c*c%d,a>>=1)a&1&&(b=b*c%d);return b}function p(w,b){x(a,w,w,b);return a}function x(a,b,c,e){if(!e)throw"DIV/0";a.s=(0<=b)-(0>b);c=Math.abs(c);e=Math.abs(e);b=q(e,c);a.n=c/b;a.d=e/b}function l(a){var d=0,c=1,e=1,f=0,k=1,h=1,g=1,m=1,n=0;if(1===a.length)a=a[0];else if(2!==a.length)throw"Wrong Parameter";
switch(typeof a){case "object":if(null!==a)if("d"in a&&"n"in a)d=a.n,c=a.d,e=d*c,"s"in a&&(e*=a.s);else if(0 in a)d=a[0],1 in a&&(c=a[1]),e=d*c;else throw"Unknown format";break;case "number":0>a&&(a=-a,e=-1);if(0<a){1<=a&&(m=Math.pow(10,Math.floor(1+Math.log(a)/Math.LN10)),a/=m);for(;1E7>=k&&1E7>=g;)if(c=(f+h)/(k+g),a===c){1E7>=k+g?(d=f+h,c=k+g):g>k?(d=h,c=g):(d=f,c=k);break}else a>c?(f+=h,k+=g):(h+=f,g+=k),1E7<k?(d=h,c=g):(d=f,c=k);d*=m}break;case "string":c=a.split("/");if(2===c.length){d=e=parseInt(c[0],
10);c=parseInt(c[1],10);break}c=a.split("");f=[0,0,0,0,0];k=[0,0,0,0,0];for(g=0;g<c.length;g++)if(h=c[g],"."===h)if(0===n)n++;else break;else if("("===h||"'"===h||")"===h)if(0<n&&3>n)n++;else break;else if(0!==g||"+"!==h)if(0===g&&"-"===h)e=-1;else if(3>n&&!isNaN(h=parseInt(h,10)))f[n]=10*f[n]+h,k[n]++;else break;if(2===n||g<c.length)throw"Corrupted number";f[3]=Math.pow(10,k[1]);f[4]=0<f[2]?Math.pow(10,k[2])-1:1;d=f[2]+f[4]*(f[0]*f[3]+f[1]);c=f[3]*f[4];break;default:throw"Unknown type";}x(b,e,d,
c)}function u(b){return function(){0===(a.n=Math.abs(b(a.s*a.n/a.d)))&&(a.s=0);a.d=1;return a}}var b={n:0,d:0,s:0},a=this;a.abs=function(){a.s=1;return a};a.add=function(){l(arguments);return p(a.s*a.n*b.d+b.s*a.d*b.n,a.d*b.d)};a.sub=function(){l(arguments);return p(a.s*a.n*b.d-b.s*a.d*b.n,a.d*b.d)};a.mul=function(){l(arguments);return p(a.s*b.s*a.n*b.n,a.d*b.d)};a.div=function(){l(arguments);return p(a.s*b.s*a.n*b.d,a.d*b.n)};a.clone=function(){return new Fraction(this)};a.set=function(){l(arguments);return p(b.s*
b.n,b.d)};a.mod=function(){l(arguments);return 0===b.n*a.d?p(0,0):p(a.s*b.d*a.n%(b.n*a.d),b.d*a.d)};a.gcd=function(){l(arguments);return p(q(b.n,a.n),b.d*a.d/q(b.d,a.d))};a.ceil=u(Math.ceil);a.floor=u(Math.floor);a.round=u(Math.round);a.reciprocal=function(){return p(a.s*a.d,a.n)};a.equals=function(){l(arguments);return a.s*a.n*b.d===b.s*b.n*a.d};a.compare=function(){l(arguments);return a.s*a.n*b.d-b.s*b.n*a.d};a.divisible=function(){l(arguments);return!!(b.n*a.d)&&!(a.n*b.d%(b.n*a.d))};a.toNumber=
function(){return a.s*a.n/a.d};a.toFraction=function(){var b=a.n%a.d;return a.n>a.d?0===a.n%a.d?""+a.s*a.n/a.d:a.s*(a.n-b)/a.d+" "+b+"/"+a.d:a.s*a.n+"/"+a.d};a.toLatex=function(){var b="";0>a.s&&(b+="-");1===a.d?b+=a.n:(b=b+"\frac{"+a.n,b+="}{",b+=a.d,b+="}");return b};a.toString=function(){var b=String(a.n).split(""),d=a.d,c=0,e=[~a.s?"":"-","",""],f="",k=r(a.n,a.d),h;a:{h=a.d;for(var g=0;300>g;g++)if(t(g,h)===t(g+k,h)){h=g;break a}h=0}for(var g=-1,m=1,n=10+k+h+b.length,l=0;l<n;l++,c*=10){l<b.length?
c+=Number(b[l]):(m=2,g++);if(0<k)if(g===h)e[m]+=f+"(",f="";else if(g===k+h){e[m]+=f+")";break}c>=d?(e[m]+=f+(c/d|0),f="",c%=d):1<m?f+="0":e[m]&&(e[m]+="0")}e[0]+=e[1]||"0";return e[2]?e[0]+"."+e[2]:e[0]};l(arguments);a.s=b.s;a.n=b.n;a.d=b.d}"undefined"!==typeof module&&module.exports&&(module.exports=Fraction);
{
"name": "fraction.js",
"title": "fraction.js",
"version": "1.6.0",
"version": "1.7.0",
"homepage": "http://www.xarg.org/2014/03/precise-calculations-in-javascript/",

@@ -6,0 +6,0 @@ "description": "A rational number library",

@@ -162,2 +162,3 @@ # Fraction.js - ℚ in JavaSript

new Fraction("123.45");
new Fraction("123/45"); // A fraction represented as two decimals, separated by a slash
new Fraction("123.'456'"); // Note the quotes, see below!

@@ -250,2 +251,6 @@ new Fraction("123.(456)"); // Note the brackets, see below!

Fraction gcd(n)
---
Returns the fractional greatest common divisor
Fraction ceil()

@@ -271,2 +276,11 @@ ---

boolean compare(n)
---
Compare two numbers.
```
result < 0: n is greater than actual number
result > 0: n is smaller than actual number
result = 0: n is equal to the actual number
```
boolean divisible(n)

@@ -273,0 +287,0 @@ ---

@@ -400,3 +400,63 @@ var assert = require('assert');

expect: "100"
}
}, {
label: "gcd(5/8, 3/7)",
set: [5, 8],
fn: "gcd",
param: [3, 7],
expect: "0.017(857142)" // == 1/56
}, {
label: "gcd(2/3, 7/5)",
set: [2, 3],
fn: "gcd",
param: [7, 5],
expect: "0.0(6)" // == 1/15
}, {
label: "3.5 < 4.1",
set: 3.5,
fn: "compare",
param: 4.1,
expect: "-12"
}, {
label: "3.5 > 4.1",
set: 4.1,
fn: "compare",
param: 3.1,
expect: "100"
}, {
label: "-3.5 > -4.1",
set: -3.5,
fn: "compare",
param: -4.1,
expect: "12"
}, {
label: "-3.5 > -4.1",
set: -4.1,
fn: "compare",
param: -3.5,
expect: "-12"
}, {
label: "4.3 == 4.3",
set: 4.3,
fn: "compare",
param: 4.3,
expect: "0"
}, {
label: "-4.3 == -4.3",
set: -4.3,
fn: "compare",
param: -4.3,
expect: "0"
}, {
label: "-4.3 < 4.3",
set: -4.3,
fn: "compare",
param: 4.3,
expect: "-860"
}, {
label: "4.3 == -4.3",
set: 4.3,
fn: "compare",
param: -4.3,
expect: "860"
},
];

@@ -403,0 +463,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc