정수 나 소수점이든 JavaScript의 모든 숫자는 유형 번호입니다. 프로그램 내에서 숫자 유형의 본질은 64 비트 부동 소수점 번호이며, 이는 Java의 이중 유형의 부동 소수점 번호와 일치합니다. 따라서 JavaScript의 모든 숫자는 부동 소수점 번호입니다. IEEE 754 표준 (플로팅 포인트 산술 표준)에 따라, JavaScript가 표현할 수있는 값의 범위는 플러스 또는 마이너스 1.7976931348623157 턴 10에 308의 전력에 10 번, 최소 10 진수는 MINUS 324에 5 배나 마이너스 값을 얻을 수 있습니다. 숫자 객체의 각각.
정수의 경우, ecmascript 표준의 요구 사항에 따라 (http://ecma262-5.com/els5_html.htm#section_8.5), JavaScript가 정확한 산술 작업을 나타내고 수행 할 수있는 정수의 범위는 다음과 같습니다. Plus 또는 Minus 2의 53까지, 즉 최소 가치 -900792540 년까지. 최대 값 +9007199254740992; 이 범위를 초과하는 정수의 경우 JavaScript는 여전히 작업을 수행 할 수 있지만 계산 결과의 정확성을 보장하지는 않습니다. 정수 비트 작업 (예 : 이동 및 기타 작업)의 경우 JavaScript는 32 비트 정수 번호, 즉 -2147483648에서 +2147483647의 정수 만 지원합니다.
실험
JavaScript에서 최대 숫자의 절대 값과 최소 10 진수 수의 절대 값을 표시합니다.
코드 사본은 다음과 같습니다.
console.log (number.max_value);
console.log (number.min_value);
결과는 1.7976931348623157E+308 및 5E-324입니다.
JavaScript는 플러스 또는 마이너스 2에서 53의 전력을 벗어난 정수에 대해 정확한 계산 결과를 제공 할 수 없습니다.
코드 사본은 다음과 같습니다.
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) {
// 무한 루프
}
계산 정확도 문제로 인해 위의 명령문은 죽은 루프에 속합니다.
비트 작업의 경우 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) 이내의 정수의 경우 JavaScript가 올바른 비트 작업을 수행 할 수 있으며 결과는 디비전 작업의 결과와 일치합니다 (128). 32 비트 이외의 정수의 경우 JavaScript는 올바른 디비전 작업 (1100000000)을 수행 할 수 있지만 비트 작업을 수행 한 후 얻은 결과는 올바른 결과와는 거리가 멀다 (-1047483648).