Number.MAX_SAFE_INTEGER 9007199254740991
Number.MAX_VALUE 1.7976931348623157e + 308
我理解如何基于JavaScript的双精度浮点运算来计算MAX_SAFE_INTEGER
,但这个巨大的最大值来自何处?如果您使用全部63位作为指数而不是安全的11位,那么它是否会出现?
答案 0 :(得分:18)
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2
是可以在计算中安全使用的最大整数。
例如,Number.MAX_VALUE
为真 - 任何大于MAX_SAFE_INTEGER的整数都不能始终准确地在内存中表示。所有位用于表示数字的数字。
FaceRecognizer
是使用双精度浮点表示表示的最大数字。一般来说,数字越大,准确度越低。
维基百科上的更多信息double-precision floating point numbers
答案 1 :(得分:8)
JS编号是内部64位浮点数(IEEE 754-2008)。
MAX_SAFE_INTEGER是可以用该格式安全表示的最大整数,这意味着低于该值(以及MIN_SAFE_INTEGER以上)的所有数字都可以表示为整数。
MAX_VALUE来自2 ^ 1023(11位尾数减去尾数符号),即大约10 ^ 308。
如果您使用全部63位,那么它是否会出现 指数而不是安全的11位?
尾数(指数)总是11位,(不是这样)超过10到308就足够了。
答案 2 :(得分:3)
如您所知,javascript的类型为Number,但不是整数。整数由javascript中的ducktyping
功能显示。所以Number.MAX_SAFE_INTEGER
< Number.MAX_VALUE
。
他们与MIN_VALUE
和MIN_SAFE_INTEGER
一起设置double
和int
的可能数值范围,当您使用parseFloat(X)
&& parseInt(X)
。
答案 3 :(得分:1)
MAX_VALUE
是双(64位)
MAX_SAFE_INTEGER
可以使用双(64位)的前53位
基本上javascript
不支持很长时间。所以对于int数用它
32位整数容器。对于大于32位的数字,它将数字保存在一个双容器中,整数部分为53位,其余11位为尾数(保留浮点数的信息)。
答案 4 :(得分:0)
基本浮点数表示为:
digits * 2 ** movement
位具有52位,移动位具有11位,并且两者共同构成一个64位数字(带有1个符号位)。这样,您可以表示各种不同的数字,因为可以存储非常大的数字(较大的正向运动),非常小的数字(较大的负向运动)和整数(数字)。
什么是Number.MAX_SAFE_INTEGER?
整数只能用0表示,然后数字包含52位数字,并且最多可以容纳2 ** 53 - 1
个数字(即Number.MAX_SAFE_INTEGER
)。
现在,对于较大的数字,您必须使用移动,这基本上意味着您向左或向右移动数字,因此您失去了准确性。
(想象digits
只需8位)
number > digits | movement > result
// savely represented
11111111 > 11111111 | 0 > 11111111
// lost the last 1
111111111 > 11111111 | 1 > 111111110
// lost the two last 1s
1111111111 > 11111111 | 10 > 1111111100
什么是Number.MAX_VALUE?
如果您设置digits
的所有位和movement
的所有位,则会得到一个数字(2 ** 53 - 1
),该数字向左移动2 ** 11
,并且是可以存储在64位中的最大数字,所有大于Infinity
。
答案 5 :(得分:0)
MAX_SAFE_INTEGER
的值为9007199254740991
。该数字背后的原因是,JavaScript使用IEEE 754中指定的双精度浮点格式数字。它返回可以表示为2 ^ 53-1的最大安全整数值。
Safe
是指能够精确表示整数并正确比较它们的能力。
例如:Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2
的计算结果为true
MAX_VALUE
的值大约为1.79E+308
或2 ^ 1024。大于MAX_VALUE的值表示为Infinity。