수학의 정확성.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
, isLog1pOK
와 isAcoshOK
는 패드를 넣은 Firefox 37, 크롬 41, 사파리 8에서 모두 그렇다.isCbrtOK
와 isAsinhOK
는 유일한 오류로 크롬 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)
Reference
이 문제에 관하여(수학의 정확성.cbrt, 수학.수학log1p), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/kangax/compat-table/issues/392텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)