>웹 프론트엔드 >JS 튜토리얼 >JavaScript_javascript 팁의 숫자 범위 소개

JavaScript_javascript 팁의 숫자 범위 소개

WBOY
WBOY원래의
2016-05-16 16:23:391567검색

정수든 소수든 JavaScript의 모든 숫자는 숫자 유형입니다. 프로그램 내에서 Number 유형은 기본적으로 64비트 부동 소수점 숫자이며 이는 Java의 double 유형 부동 소수점 숫자와 일치합니다. 따라서 JavaScript의 모든 숫자는 부동 소수점 숫자입니다. IEEE 754 표준(부동 소수점 산술 표준)에 따라 JavaScript가 표현할 수 있는 수치 범위는 플러스 또는 마이너스 1.7976931348623157 곱하기 10의 308승이며, 표현할 수 있는 가장 작은 소수점은 플러스 또는 마이너스 5 곱하기 10의 제곱입니다. 음수 324입니다. 이 두 경계 값은 각각 Number 객체의 MAX_VALUE 속성과 MIN_VALUE 속성에 액세스하여 얻을 수 있습니다.

정수의 경우 ECMAScript 표준(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5)의 요구 사항에 따라 JavaScript가 표현하고 수행할 수 있는 정수의 범위입니다. 정확한 산술 연산은 다음과 같습니다. 플러스 또는 마이너스 2의 53승, 즉 최소값 -9007199254740992에서 최대값 9007199254740992까지의 범위입니다. 이 범위를 초과하는 정수의 경우 JavaScript는 계속해서 연산을 수행할 수 있지만 다음을 보장하지는 않습니다. 작업 결과의 정확성. 정수 비트 연산(예: 시프트 및 기타 연산)의 경우 JavaScript는 32비트 정수, 즉 -2147483648에서 2147483647까지의 정수만 지원한다는 점에 주목할 가치가 있습니다.

실험

자바스크립트에서 가장 큰 숫자의 절대값과 가장 작은 소수의 절대값을 표시합니다.

코드 복사 코드는 다음과 같습니다.

console.log(Number.MAX_VALUE);
console.log(숫자.MIN_VALUE);

표시된 결과는 1.7976931348623157e 308 및 5e-324입니다.

더하기 또는 빼기 2의 53승 범위를 벗어난 정수의 경우 JavaScript는 정확한 계산 결과를 제공할 수 없습니다.

코드 복사 코드는 다음과 같습니다.

var a = 9007199254740992;
console.log(a 3);


올바른 계산 결과는 9007199254740995여야 하지만 JavaScript에서 제공하는 계산 결과는 9007199254740996입니다. 계산 공식을 변경하려고 시도한 후 정수가 9007199254740992보다 큰 경우 이 계산 결과에 오류가 자주 발생한다는 것을 알 수 있습니다. 계산 정확도의 편차가 허용 가능한 경우 다음 예의 결과는 더욱 심각합니다.


코드 복사 코드는 다음과 같습니다.

var MAX_INT = 9007199254740992;
for (var i = MAX_INT; i < MAX_INT 2; i) {
//무한루프
}


계산 정확도 문제로 인해 위의 for 문은 무한 루프에 빠지게 됩니다.

비트 연산의 경우 JavaScript는 32비트 정수만 지원합니다.


코드 복사 코드는 다음과 같습니다.

var smallInt = 256;
var bigInt = 2200000000;
console.log(smallInt / 2);
console.log(smallInt >> 1);
console.log(bigInt / 2);
console.log(bigInt >> 1);


32비트(256) 내의 정수에 대해서는 자바스크립트가 올바른 비트 연산을 수행할 수 있으며 그 결과는 나누기 연산(128)의 결과와 일치함을 알 수 있다. 32비트가 아닌 정수의 경우 JavaScript는 올바른 나누기 연산(1100000000)을 수행할 수 있지만 비트 연산을 수행한 후 얻은 결과는 올바른 결과(-1047483648)와는 거리가 멀습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.