3

アプリケーションで値を使用したいのNumber.EPSILONですが、これがさまざまなブラウザーでどのようにサポートされているのか疑問に思っていました。MDN は、Firefox と Chrome ではサポートされていますが、IE と Safari ではサポートされていないと述べています。

IE11 と Edge のコンソールで自分でテストしました。Edgeは2.220446049250313e-16期待どおりに私を与え、IE11はundefined. Safari を自分でテストすることはできません。

  1. さまざまなブラウザー バージョンのサポートを示すサポート テーブルはありますか?

  2. var eps = Number.EPSILON || 2.220446049250313e-16;フォールバックとして安全に使用できますか?

4

1 に答える 1

5

1) ブラウザリングで自分で試してみてください(引用"https://jsfiddle.net/jz350gf1/1/"符なしで)。赤で表示されている場合は、サポートされていません。

JavaScript コードはdocument.body.bgColor = Number.EPSILON !== undefined ? 'lime' : 'red';.

たとえば、Vista の IE9 および Safari 5.1 はサポートしていません。

Number.EPSILON の MDN ページの下部にも互換性表があります。現時点では、Chrome、Firefox、および (おそらく) Opera のみがサポートしていると主張しています。5.1 以降のバージョンの Safari でサポートされている可能性があります。ただし、テストするMacはありません。

caniuse.com では、ES6 によって導入された機能がここにあります。最近のバージョンの Safari は完全にサポートされているようです。どこまでさかのぼるかはわかりませんが。当時から現在までのバージョンは、Safari の暗黒時代でした。結局、Opera はそれをサポートしていないのでしょうか? いいえ、サポートしています。

いずれにせよ、2) については、はい。定数は定数です定数です。倍精度浮動小数点のイプシロンは、すべての言語で常に同じになります。このwikiページによると、値を具体的に導出したい場合は、計算で導出できるはずです。これがデモンストレーションです。

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();、倍精度浮動小数点数型よりも少ないものを使用する可能性のある非準拠のブラウザーについて非常に慎重になりたい場合は、そうすることができますが、存在しないと思います (私は例外を受け入れます)。:)

于 2016-09-26T06:25:04.847 に答える