Skip to content

Instantly share code, notes, and snippets.

@embarq
Created September 27, 2016 18:37
Show Gist options
  • Save embarq/014408e9e9baf4ed16f25ef99cc5e69b to your computer and use it in GitHub Desktop.
Save embarq/014408e9e9baf4ed16f25ef99cc5e69b to your computer and use it in GitHub Desktop.
"use strict";
let getErrorRank = err => {
let rankCounter = 0;
let ranks = new Array(8).fill().map((item, i) => 1 / Math.pow(10, i)).slice(1);
for (let i = 0; i < ranks.length; i++) {
if (err < ranks[i]) {
rankCounter++;
} else {
return rankCounter;
}
}
}
let getError = (value, error) => (value.initial > value.rounded ? value.initial - value.rounded : value.rounded - value.initial) + error;
let checkRoundedError = (value, error) => {
let absoluteError = value * (error / 1e3);
let errorRank = getErrorRank(absoluteError);
let roundedValue = value.toFixed(errorRank - 1);
let totalError = getError({ initial: value, rounded: roundedValue }, absoluteError);
let totalErrorRank = getErrorRank(totalError);
console.log(`Value: ${value}, Error: ${error}, Rounded: ${roundedValue}`);
return totalErrorRank === errorRank;
}
[
{ value: 7.521, error: 0.12 },
{ value: 2.3544, error: 0.2 },
{ value: 21.68563, error: 0.3 }
].map(num => console.log(`${checkRoundedError(num.value, num.error) ? '' : 'not'} all numbers are correct in a broad sense`));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment