Number.EPSILON 的浏览器支持?

Browsersupport of Number.EPSILON?

我想在我的应用程序中使用 Number.EPSILON 值,并且想知道不同浏览器如何支持它。 MDN states Firefox 和 Chrome 支持它,但 IE 和 Safari 不支持。

我自己在IE11和Edge的控制台测试过。 Edge 给了我预期的 2.220446049250313e-16,IE11 给了我 undefined。我无法自己测试 Safari。

  1. 有没有支持table表示支持不同浏览器版本的?

  2. 我可以安全地使用 var eps = Number.EPSILON || 2.220446049250313e-16; 作为备用吗?

1) 您可以在browserling 上自己尝试并输入"https://jsfiddle.net/jz350gf1/1/"(不带引号)。如果您看到红色,则表示不支持。

javascript代码是document.body.bgColor = Number.EPSILON !== undefined ? 'lime' : 'red';

IE9 和 Safari 5.1 在 Vista 上不支持,例如。

the MDN page for Number.EPSILON 的底部还有兼容性 table。目前,它声称只有 Chrome、Firefox 和(可能)Opera 支持它。高于 5.1 的 Safari 版本可能支持它。不过我没有 Mac 来测试它。

在caniuse.com处,here's处ES6引入的特性。看起来最新版本的 Safari 已完全支持。我不确定它能追溯到多远。从那时到现在的版本是 Safari 的黑暗时代。 Opera 可能不支持吧?不,它确实支持它。

无论哪种方式,至于 2) 是的。常量就是常量就是常量。双精度浮点数的 epsilon 在所有语言中总是相同的。虽然您是否应该根据 this wiki page, you should be able to derive it computationally. Here's a demonstration.

具体推导该值

function getEpsilon() {
  var e = 1.0;
  while ( ( 1.0 + 0.5 * e ) !== 1.0 )
    e *= 0.5;
  return e;
}

alert("And the epsilon is... "+getEpsilon());

因此,如果你想对可能使用小于双精度浮点数类型的不符合标准的浏览器保持超级依赖,你可以做 var eps = Number.EPSILON || getEpsilon();,尽管我相信 none 存在(我愿意接受例外)。 :)