v1
- by gafegem716 12/30/202100
Setup HTML - click to add setup HTML
disable setup JavaScript
Setup JavaScript
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;
}
delete caserun single casedrag and drop case


ready



for(let n of nums){
  getFrac(n);
}
Test Case - click to add another test case
Teardown JS - click to add teardown JavaScript
Output (DOM) - click to monitor output (DOM) while test is running
RUN