2016-09-26 14 views
1

내 응용 프로그램에서 Number.EPSILON 값을 사용하고 다른 브라우저에서 어떻게 지원되는지 궁금합니다. MDN states은 Firefox와 Chrome에서 지원되지만 IE와 Safari에서는 지원되지 않습니다.Number의 지원 .EPSILON?

IE11 및 Edge의 콘솔에서 직접 테스트했습니다. Edge는 나를 2.220446049250313e-16으로 예상하고, IE11은 undefined을 제공합니다. Safari를 직접 테스트 할 수 없습니다.

  1. 다른 브라우저 버전을 지원하는 지원 테이블이 있습니까?

  2. 나는 var eps = Number.EPSILON || 2.220446049250313e-16;을 대체로 안전하게 사용할 수 있습니까?

답변

2

1) 당신은) browserling에서 자신을 그것을 밖으로 시도하고 따옴표없이 ("https://jsfiddle.net/jz350gf1/1/"에 펀치 수 있습니다. 빨간색이 표시되면 지원되지 않습니다.

자바 스크립트 코드는 document.body.bgColor = Number.EPSILON !== undefined ? 'lime' : 'red';입니다.

IE9 및 Vista의 Safari 5.1에서는이를 지원하지 않습니다.

the MDN page for Number.EPSILON 하단에도 호환성 표가 있습니다. 현재로서는 크롬, 파이어 폭스 및 오페라에서만 지원한다고 주장합니다. Safari 버전 5.1 이상을 지원할 수 있습니다. 나는 그것을 시험해 볼 맥이 없다.

caniuse.com에서 here's은 기능이 ES6에 의해 도입되는 곳입니다. 최근 버전의 Safari와 같은 기능이 완벽하게 지원됩니다. 나는 그것이 얼마나 멀리 뒤로가는 지에 관해 명확히하지 않는다. 당시와 지금의 버전은 사파리의 어두운 시대였습니다. Opera가 결국 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());

당신은 소수점 숫자 형 부동 배정 밀도보다 적은 것을 사용할 수있다 부적합 브라우저에 대한 슈퍼 pendantic 수 있도록하려면 내가 아무도 믿을 수 없지만 그래서 당신은, var eps = Number.EPSILON || getEpsilon();을 할 수 존재 (나는 예외에 열려있다). :)

+0

대단히 감사합니다. :) – Fidel90

+1

기술적으로 더 정확하지만 (실제로는 유용하지 않은) 엡실론의 대안 계산을 선호하는 경우 계산 된 값이 다시 한 번 반으로됩니다 ('1.1102230246251565e-16'). 주어진 값과의 비교에서이 값을 사용하려면 반올림 오류가 1 비트 (1/2 비트가 아니기 때문에)와 프로세스가 무의미하기 때문에 두 배로해야합니다. 그래서 위키 페이지의 두 컬럼을 설명합니다. ('b^{- (p-1)}/2' 대'b^{- (p-1)}') – TylerY86

+0

Doh, 절반 -> 절반. – TylerY86