Math.round issues
see https://twitter.com/BrendanEich/status/360832908514181122
Math.round(0.5 - Number.EPSILON / 4) should be equal to 0
Math.round((2 / Number.EPSILON + 1) / 2 + 1) should be equal to (2 / Number.EPSILON + 1) / 2 + 1
Math.round(2 / Number.EPSILON) should be equal to 2 / Number.EPSILON
The ES5 spec - http://es5.github.io/#x15.8.2.15 - says, that Math.round "Returns the Number value that is closest to x and is equal to a mathematical integer", but Note 2 says nothing about
Note 2 was fixed in ES6 - https://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.round
Some browsers have good implementaions (FF 35, Chrome ?): https://bugzilla.mozilla.org/show_bug.cgi?id=622348 https://bugzilla.mozilla.org/show_bug.cgi?id=1000606
But IE 11, Opera 12, Safari are buggy here.
I think, the implementation may look like this:
Math.round = function (x) {
var n = Number(x);
var ceil = Math.ceil(n);
return ceil - (ceil - 0.5 > n ? 1 : 0);
};Source: es-shims/es5-shim