21 lines
626 B
JavaScript
21 lines
626 B
JavaScript
|
var frac = function(x, D, mixed) {
|
||
|
var n1 = Math.floor(x), d1 = 1;
|
||
|
var n2 = n1+1, d2 = 1;
|
||
|
if(x !== n1) while(d1 <= D && d2 <= D) {
|
||
|
var m = (n1 + n2) / (d1 + d2);
|
||
|
if(x === m) {
|
||
|
if(d1 + d2 <= D) d1+=d2, n1+=n2, d2=D+1;
|
||
|
else if(d1 > d2) d2=D+1;
|
||
|
else d1=D+1;
|
||
|
break;
|
||
|
}
|
||
|
else if(x < m) n2 = n1+n2, d2 = d1+d2;
|
||
|
else n1 = n1+n2, d1 = d1+d2;
|
||
|
}
|
||
|
if(d1 > D) d1 = d2, n1 = n2;
|
||
|
if(!mixed) return [0, n1, d1];
|
||
|
var q = Math.floor(n1/d1);
|
||
|
return [q, n1 - q*d1, d1];
|
||
|
};
|
||
|
if(typeof module !== undefined) module.exports = frac;
|