2016-09-26 11 views
1

Я хотел бы использовать значение Number.EPSILON в своем приложении и задавался вопросом, как это поддерживается в разных браузерах. MDN states, что он поддерживается Firefox и Chrome, но не IE и Safari.Browsersupport of Number.EPSILON?

Я сам тестировал его в консоли IE11 и Edge. Edge дает мне 2.220446049250313e-16, как и ожидалось, IE11 дает undefined. Я сам не могу проверить Сафари.

  1. Есть ли таблица поддержки, которая показывает поддержку различных версий браузера?

  2. Могу ли я безопасно использовать var eps = Number.EPSILON || 2.220446049250313e-16; как резерв?

ответ

2

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. В настоящее время он утверждает, что поддерживает только Chrome, Firefox и (возможно) Opera. Версии Safari, превышающие 5.1, могут поддерживать его. У меня нет Mac, чтобы проверить это, хотя.

На caniuse.com, here's, где функции представлены ES6. Похоже, что последние версии Safari имеют полную поддержку. Я не уверен, как далеко назад это происходит. Версии между тем и сейчас были темными веками для Сафари. Возможно, Opera не поддерживает его? Нет, он это поддерживает.

В любом случае, как для 2) Да. Константы - это константы. Эпсилон для плавающих точек с двойной точностью всегда будет одинаковым для всех языков. Хотя, если вы хотите получить значение специально, в соответствии с this wiki page, вы должны иметь возможность вычислить его вычислительно. 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();, если вы хотите быть супер-pendantic о несоответствующих браузерах, которые могут использовать что-то меньше, чем двойная точность с плавающей запятой типа номера, хотя я не верю ни существуют (я открыт для исключений). :)

+0

Отличный ответ, спасибо большое :) – Fidel90

+1

Если вы предпочитаете альтернативный расчет эпсилона, который является более технически точным (но на самом деле не полезным), это вычисленное значение снова наполовину ('1.1102230246251565e-16')). Чтобы использовать его в сравнении с данным значением, вам нужно удвоить его (потому что ошибка округления равна 1 бит, а не 1/2) и в процессе делает ее бессмысленной. Таким образом, это объясняет два столбца на странице wiki. ('b^{- (p-1)}/2' vs.' b^{- (p-1)} ') – TylerY86

+0

Doh, halfed -> halfved. – TylerY86

 Смежные вопросы

  • Нет связанных вопросов^_^