let N=1000,nums=new Array(N).fill(0).map(v=>Math.random()*(Math.random()<2/3?1:100));
function getFrac(x, maxErr){
let s = x<0?-1:1
x = Math.abs(x),
i = Math.floor(x),
d = x-i,
maxErr = maxErr ? maxErr : Math.pow(10,-6);
if(d<maxErr) return [i,1];
let n = 1,
nmax = Math.ceil(d*Math.min(
Math.pow(10,Math.ceil(Math.abs(Math.log10(maxErr)))),
Number.MAX_SAFE_INTEGER
)),
min = Infinity,
best = [0,0];
while(n <= nmax){
let err = Math.abs(d - n/Math.round(n/d));
if(err < maxErr) return [s*(n+i*Math.round(n/d)), Math.round(n/d)];
else if(err < min){
min = err;
best = [s*(n+i*Math.round(n/d)), Math.round(n/d)];
}
n++;
}
return best[1] == 0 ? false : best;
}