수학의 정확성.cbrt, 수학.수학log1p

6180 단어 compat-table

묘사

var error = function (x, value) {
  return Math.abs(1 - x / value) / 2.220446049250313e-16; // error in number of ulps (http://en.wikipedia.org/wiki/Unit_in_the_last_place)
};

Windows의 Firefox<48:


https://bugzilla.mozilla.org/show_bug.cgi?id=933257
https://bugzilla.mozilla.org/show_bug.cgi?id=897634
error(Math.log1p(0.0006516748007717887), 0.0006514625529548382) > 500;
error(Math.expm1(0.00001), 0.000010000050000166668) > 43000;
error(Math.cbrt(-3.9355663969868275e+307), -3.401489081587483e+102) > 50;
error(Math.asinh(-0.0005), -0.000499999979166669) > 100; // (caused by issues with `expm1` and `log1p` on Windows)
error(Math.atanh(-0.0005), -0.0005000000416666729) > 100; // (caused by issues with `expm1` and `log1p` on Windows)

불여우

Math.exp(1) !== Math.E

Windows의 Chrome<54:


https://code.google.com/p/v8/issues/detail?id=3468
https://code.google.com/p/v8/issues/detail?id=3509
error(Math.exp(-707.9999999999998), 3.30755300363916e-308) > 250;
Math.acosh(1e+308) === Infinity;
Math.asinh(1e+300) === Infinity;
Math.atanh(1e-300) === 0;

Konqueror 4.13(Ubuntu):


https://github.com/KDE/kjs/blob/master/src/kjs/math_object.cpp
   Math.expm1 == undefined && Math.exmp1 != undefined
   Math.LOG10E !== 0.4342944819032518 // 0.43429448190325176
   Math.abs(+0) === 0 && 1 / Math.abs(+0) < 0
   Math.hypot.length === 0
   Math.hypot(1e200, 1e200) === 1 / 0 // overflow and underflow issues

   Math.asinh == undefined;
   Math.clz32 == undefeined;
   Math.imul() == undefined;

잘못된 수학.원형 수렵10/모바일 수렵10/IE 11/Edge 13/Opera 12/Konqueror 4.13:

Math.round(0.49999999999999994) !== 0

수학두 번째 매개변수가 정수인 경우 Firefox, Chrome, Safari 및 Edge의 pow 문제:


https://code.google.com/p/v8/issues/detail?id=3599
https://bugzilla.mozilla.org/show_bug.cgi?id=618251
error(Math.pow(10, 305), 1e+305) > 2;
error(Math.pow(10, 308), 1e+308) > 2;
error(Math.pow(9767, 77), 1.627839019440664e+307) > 8
error(Math.pow(1 + Math.pow(2, -27), Math.pow(2, 31) - 1), 8886109.924647752) > Math.pow(2, 28)

Chrome Mobile 52(안드로이드 5.1):

Math.pow(11, Math.pow(11, 9)) === 0;

Mobile Safari 10(iOS 9.2):

Math.expm1(709.782712893384) === -1;
// note: Math.expm1(709.7827128933839) === 1.7976931348620688e+308

es6 패드:

nothing

핵심 js:

error(Math.acosh(1 + Number.EPSILON), 2.1073424255447017e-8) > 1e+7;
Math.asinh(1e-300) === 0;
Math.asinh(1e+300) === Infinity;
Math.atanh(1e-300) === 0;
error(Math.cbrt(1e-300), 1e-100) > 50;
Math.cosh(710) === Infinity;
error(Math.expm1(1e-6), 0.0000010000005000001665) > 1e+5;
error(Math.log1p(1e-8), 9.999999950000001e-9) > 1e+7;
+ Math.sinh, Math.tanh (because of expm1)

Traceur 및 MDN용 polyfills:

Math.acosh(1e+308) === Infinity;
error(Math.acosh(1 + Number.EPSILON), 2.1073424255447017e-8) > 1e+7;
Math.asinh(1e-300) === 0;
Math.asinh(1e+300) === Infinity;
Math.atanh(1e-300) === 0;
error(Math.cbrt(1e-300), 1e-100) > 50;
Math.cosh(710) === Infinity;
Math.sinh(710) === Infinity;
Math.sinh(1e-300) === 0;
Math.tanh(1e-300) === 0;
Math.tanh(1e+300) !== Math.tanh(1e+300);
Math.expm1(1e-300) === 0;
Math.log1p(1e-300) === 0;

닫기:


사양에 정의된 수학 함수가 없습니다(https://people.mozilla.org/~jorendorff/es6 초고.html#sec 함수 속성의 수학 대상)은 특히 "다른 매개 변수 값에 대해 이 함수들은 익숙한 수학 함수 결과의 근사값을 계산하기 위한 것이지만 근사 알고리즘을 선택할 때 일정한 자유를 허용한다"고 지적했다.
여기서 어떤 호환성을 테스트해야 합니까?

토론 #1

@Yaffle는 그것을 꺼내서 토론해야 한다

토론 #2

@Yaffle는 더 좋은 실시 방안을 제시할 수 있다.

토론 #셋

@Yaffle는 진지합니다.나는 수학 전문가가 아니다.당신은 이 라이브러리에 수학 함수를 실현할 수 있습니다.

토론 #4

@Yaffle감사

토론 #5

Math.tanh.나는 그것들을 복구했다. (그러나 v8 엔진의 강제는 아니다.) 와 Math.acosh.Math.hypot 감사합니다. - 제가 실패 테스트의 예로 사용할 수 있는 모든 예를 구체적으로 말씀해 주시겠어요?

토론 #6

토론 #7

는 ES5이지 ES6가 아니므로 이 문제에 대한 Math.round 질문을 제출하십시오. -) ES6에는 es5-shim가 있습니다. 비슷한 문제가 있을 수 있습니다.Math.fround감사합니다!

토론 #8

@Yaffle PRs, 테스트

토론 #9

/es5-shim까지 가능, 그리고 es6-shim,아주 유용할 것 - 실현이 매우 좋지만, 테스트는 중요한 부분:-)compat-table@Yaffle, 감사합니다!

토론 #10

, isExpm1OK, isLog1pOKisAcoshOK는 패드를 넣은 Firefox 37, 크롬 41, 사파리 8에서 모두 그렇다.isCbrtOKisAsinhOK는 유일한 오류로 크롬 41에서만 FF/SAfari에서 전달된다.
나는 이미 이 두 사람을 위해 isAtanhOK의 서류를 제출했다.es6-shim아 - 새로운 PRs를 환영합니다. 댓글이 운영체제와 브라우저 버전을 동시에 포함할 수 있도록 하겠습니다.

토론 #11

@Yaffle감사합니다. - 문제가 어디에 있는지 알아보기 어려운데 값이 무엇인지, 브라우저에 어떤 편차가 생겼는지 지적해 주실 수 있습니까?

토론 #12

감사합니다. #724-다른 Konqueror 질문에 대한 의견을 추가할 수 있다면 다행입니다. 테스트할 방법이 없기 때문입니다.

토론 #13

Konqueror 삭제를 고려하겠습니다.특정한 관중을 가진 오래된 브라우저인 것 같다.나는 누가 그것을 다시 사용할 것인지를 분명히 하려고 노력하고 있다.

토론 #14

이것도 공평한 관점이다. 그것이 아무런 가치가 없을 수도 있다는 것을 포함한다.

토론 #15

이 모든 상황에서 정답/가장 좋은 답이 무엇인지 지적해 주시면 도움이 됩니다

토론 #16

@Yafflelol wat?왜 모든 댓글을 삭제합니까?

토론 #17

@ljharb, 나는 이미 모든 내용을 첫 번째 논평에 통합했다.

토론 #18

Math.acosh(1e+308) === Infinity;
error(Math.acosh(1 + Number.EPSILON), 2.1073424255447017e-8) > 1e+7;
Math.asinh(1e-300) === 0;
Math.asinh(1e+300) === Infinity;
error(Math.cbrt(1e-300), 1e-100) > 50;
Math.cosh(710) === Infinity;
Math.sinh(710) === Infinity;
Math.sinh(1e-300) === 0;
Math.tanh(1e-300) === 0;
Math.hypot(0, 0) !== Math.hypot(0, 0)
Math.hypot(1, Infinity) !== Math.hypot(1, Infinity)

좋은 웹페이지 즐겨찾기