6.1.6 Number 类型

Number 类型是精确的 18437736874454810627(即 2^64 - 2^53 + 3)值,表示在 IEEE 二进制浮点算术标准中规定的双精度 64 位格式的 IEEE 754-2008 值,除了 9007199254740990 (即2^53 - 2)的 IEEE 标准数值外,非数字值在 ECMAScript 中使用 NaN 这个值来表示。(注意,NaN 值是由程序表达式 NaN 产生)。在一些内置系统(implementations)中,外部代码可能能够检测各种非数字值之间的差异,但是这种行为是依赖于内置系统实现的;对于 ECMAScript 代码,所有的 NaN 值都是不能被区分的。

注意:通过 ECMAScript 内置系统, Number 值被储存不一定像内部表示的 Number 值被使用那样,在此之后,位模式(bit pattern)是可以被一个ArrayBuffer(见 24.1)所观察到。

有两个其他特殊值,称为正无穷大和负无穷大。 为了简明,这些值也分别用符号 +∞ 和 -∞ 作为说明。(注意,这两个无限数值由程序表达式 +Infinity(或简单的 Infinity)和 -Infinity 产生)。

其他的 18437736874454810624(即 2^64 - 2^53)值称为有限数。 其中一半是正数,一半是负数;对于每个有限的正数值,存在具有相同幅度的对应负值。

注意,存在正零和负零。 为了简明,这些值也分别用符号 +0 和 -0 用于说明。(注意,这两个不同的零数值由程序表达式 +0(或简单地为0)和 -0 产生)。

有限非零值的18437736874454810622(即2^64 - 2^53 - 2)有两种:

它们的18428729675200069632(即,2^64 - 2^54)被标准化,具有形式

s × m × 2^e

其中 s 是 +1 或 -1,m 是小于 2^53 但不小于 2^52 的正整数,e 是范围为 -1074 至 971 的整数。

剩余的 9007199254740990(即2^53-2)值是非标准化的,具有形式

s × m × 2^e

其中 s 是 +1 或 -1,m 是小于 2^52 的正整数,e是 -1074。

注意,其大小不大于 2^53 的所有正和负整数在数字类型中是可表示的(实际上,整数 0 具有两个表示,+ 0 和 -0)。

如果有限数是非零的,则有限数具有奇数有效数,并且用于表示它(以上所示的两种形式之一)的整数 m 是奇数。 否则,它有一个偶数。

在本说明书中,短语 “x的数值”,其中 x 表示精确的非零实数数学量(其甚至可以是无理数,例如 π)表示以下面的方式选择的数值。考虑 Number 类型的所有有限值的集合,删除 -0 并且添加了两个在 Number 类型中不可表示的附加值,即 2^1024(即+1×2^53×2^971)和 -2^1024是 -1×2^53×2^971)。选择此集合中与 x 最接近的成员。如果集合的两个值相等,则选择具有偶数有效位的一个;为此目的,两个额外值 2^1024 和 -2^1024 被认为具有偶数有效数。最后,如果选择2^1024,将其替换为 +∞;如果选择-2^1024,请将其替换为 -∞;如果选择 +0,当且仅当 x 小于零时,将其替换为 -0;任何其他选择的值不变。结果是 x 的 Number值。(该过程完全对应于 IEEE 754-2008 “从最接近,连接到偶数” 模式的行为)。

一些 ECMAScript 运算符仅处理特定范围内的整数,例如-2^31至2^31 - 1(包括),或 0 至2^16 - 1(包括)。 这些运算符接受Number 类型的任何值,但首先需要将每个这样的值转换为预期范围内的整数值。 请参见 7.1 中对数字转换操作的描述。

results matching ""

    No results matching ""