Dan*_*obe 32 javascript integer
Number.MAX_SAFE_INTEGER 9007199254740991
Number.MAX_VALUE 1.7976931348623157e + 308
我理解如何MAX_SAFE_INTEGER基于JavaScript的双精度浮点运算来计算,但这个巨大的最大值来自何处?如果你使用全部63位作为指数而不是安全的11位,那么它是否会出现?
Ily*_*lya 13
JS编号是内部64位浮点数(IEEE 754-2008).
MAX_SAFE_INTEGER是可以以该格式安全表示的最大整数,这意味着低于该值(以及MIN_SAFE_INTEGER以上)的所有数字都可以表示为整数.
MAX_VALUE来自2 ^ 1023(11位尾数减去尾数符号),即大约10 ^ 308.
如果你使用全部63位作为指数而不是安全的11位,那么它是否会出现?
尾数(指数)总是11位,(不是那么)超级到10 ^ 308就足够了.
如您所知,javascript的类型为Number,但不是整数。整数按ducktyping功能显示在javascript中。所以Number.MAX_SAFE_INTEGER< Number.MAX_VALUE。
当与&& 一起使用时MIN_VALUE,它们与一起并MIN_SAFE_INTEGER设置可能的Number值的范围。doubleintparseFloat(X)parseInt(X)
MAX_VALUE在double(64位)中
MAX_SAFE_INTEGER可以使用double(64位)中的前53位
基本上javascript不支持long。因此对于int数,它使用32位整数容器。对于大于32位的数字,将其保留在双精度容器中,该整数部分为53位,其余11位为尾数(保留浮点数的信息)。
基本上,浮点数表示为:
digits * 2 ** movement
Run Code Online (Sandbox Code Playgroud)
数字(尾数)有52位(和1个“隐藏位”),移动有11位,并且两者一起形成一个64位数字(带有1个符号位)。这样,您可以表示各种不同的数字,因为您可以存储非常大的数字(较大的正向运动),非常小的数字(较大的负向运动)和整数(数字)。
什么是Number.MAX_SAFE_INTEGER?
整数可以通过设置移动方式来表示,即尾数实际上就是数字本身,然后数字包含52 + 1位数字,并且最多可以容纳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
Run Code Online (Sandbox Code Playgroud)
什么是Number.MAX_VALUE?
如果设置的所有位digits和的所有位movement,则会得到一个向左2 ** 53 - 1移动的数字(),它是2 ** 10 - 1可以存储在64位中的最大数字,所有较大的数字Infinity(表示为运动为2 ** 10,尾数为0)。
| 归档时间: |
|
| 查看次数: |
6053 次 |
| 最近记录: |