If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.

Rounding number without impacting result accuracy

Rounding number without impacting result accuracy

The problem: If you do log1000 the result you will get is 2.9999999999999996 rather than 3 or
0.1 + 0.2 = 0.30000000000000004.

I tried to remove this rounding error in the JavaScript eval() function without impacting result accuracy.
In the format numbering function FormatNumber(strnum) I put CheckEpsilon(strnum) which tests if the "right tail" of number is greather than epsilon (assuming that the value of epsilon is 1e-9 as in C)

function CheckEpsilon(strnum) {
// EPSILON - Difference between 1 and the least value greater than 1 that is representable.

var epsilon = 1e-8;
var x = parseFloat(strnum);

var expnum = x.toExponential(17);
// Last 10 numbers before the exponent (9 if the number is negative)
// we turn in to a new decimal number ...
var y = parseFloat("0." + expnum.slice(9,19));

// and then we compare it to epsilon (1e-8)
// If y (or 1-y) is smaller than epsilon we round strnum
if (y<epsilon || (1-y)<epsilon) {
strnum = x.toExponential(10);
}

//and if it isn't, strnum is returned as normal
return strnum;
}

If you're interested in a practical showcase of the function you can take a look at a calculator I made (it's made in javascript so you can check the code easily). The link is: http://www.periodni.com/calculator.html.

This is the way I've done it, however my actual question is: Does anyone know of any better way of doing this?