"positive" 和 "negative" 在 ECMAScript 中是什么意思? +0 和 -0
What do "positive" and "negative" mean in ECMAScript? +0 and -0
我正在阅读 ECMAScript 5.1 spec。它说:
The slice
method takes two arguments, start and end [...]. If start is negative, it is treated as
length+start where length is the length of the array. If end is negative, it is treated as length+end where length is the length
of the array.
"negative"是什么意思?这是有道理的,就像在数学中一样,
- 若
num > 0
,则num
为正数
- 如果
num < 0
,则num
为负数。
但是 +0
和 -0
呢?在数学中有一个 0
,它既不是正数也不是负数。我的猜测是,在 ECMAScript 中,
+0
(a.k.a.正零)为正。
-0
(a.k.a.负零)为负.
但我尝试将 -0
与 slice
一起使用,浏览器将其视为非负值。
那么,+0
和 -0
都是非正非负的吗?
一个数的正数或负数在哪里定义?我没有在 ECMAScript 规范中找到它的定义。定义是否继承自IEEE 754?
你的困惑在这部分:
But what about +0
and -0
? In math there is a single 0
, which is not positive nor negative. My guess was that, in ECMAScript,
+0
(a.k.a. positive zero) is positive.
-0
(a.k.a. negative zero) is negative.
+0
不是正数; -0
不是负数。从概念上讲,它们都表示数字零 或者,当发生下溢时,任何数量级太小而无法用可用的有限位数表示的数字。
+0
和 -0
的决定更多来自 IEEE 而不是 ECMA。
如果您不区分代表数学值 0 的 文字 +0
和 -0
,以及 values +0
和 -0
,分别是内存中的表示:
- 从 0 到最小正实数的任何数学值,可以存储在双精度 64 位数据格式中
- 从双精度64位数据格式可以存储的最大负实数到0的任意数学值
如果你有一个变量包含 Number
实例 -0
,这可能代表实数 0(显然没有符号),或者它可能代表实数 10^ -10000。
如果你在代码中看到文字 -0
或+0
,这将被解释为实数0,存储(就像任何足够小但实际上不是 0 的实数)如 Number
-0
或 +0
,视情况而定。
以下是规范中的一些相关部分,希望能澄清一些问题:
术语 "positive number" 和 "negative number" 确实在 ECMAScript 规范中定义:
The Number type has exactly 18437736874454810627 (that is,
264−253+3) values [...]
The 9007199254740990 (that is, 253−2) distinct
“Not-a-Number” values of the IEEE Standard are represented in
ECMAScript as a single special NaN value [...]
There are two other special values, called positive Infinity and
negative Infinity [...]
The other 18437736874454810624 (that is,
264−253) values are called the finite numbers.
Half of these are positive numbers and half are negative
numbers; for every finite positive Number value there is a
corresponding negative value having the same magnitude.
因此,
- 由于
+0
和 -0
是这些有限数中的两个,因此每个都必须是正数或负数。
- 由于每个有限的正数都必须有一个负数对应,所以
+0
是正数而 -0
是负数,或者相反。
- 如果正零是负数,负零是正数,那就太天真了。所以我们可以(大概)假设
+0
是正数,-0
是负数。
但是,根据下面,+0
和-0
都不能为负数:
The mathematical function abs(x) yields the absolute value of x,
which is −x if x is negative (less than zero) and otherwise is
x itself.
事实上,在大多数情况下,规范似乎区分了变量为正或负的情况与变量为零的情况。例如,
The mathematical function sign(x) yields 1 if x is positive
and −1 if
x is negative. The sign function is not used in this standard for cases when x is zero.
因此,规范自相矛盾。
我正在阅读 ECMAScript 5.1 spec。它说:
The
slice
method takes two arguments, start and end [...]. If start is negative, it is treated as length+start where length is the length of the array. If end is negative, it is treated as length+end where length is the length of the array.
"negative"是什么意思?这是有道理的,就像在数学中一样,
- 若
num > 0
,则num
为正数 - 如果
num < 0
,则num
为负数。
但是 +0
和 -0
呢?在数学中有一个 0
,它既不是正数也不是负数。我的猜测是,在 ECMAScript 中,
+0
(a.k.a.正零)为正。-0
(a.k.a.负零)为负.
但我尝试将 -0
与 slice
一起使用,浏览器将其视为非负值。
那么,+0
和 -0
都是非正非负的吗?
一个数的正数或负数在哪里定义?我没有在 ECMAScript 规范中找到它的定义。定义是否继承自IEEE 754?
你的困惑在这部分:
But what about
+0
and-0
? In math there is a single0
, which is not positive nor negative. My guess was that, in ECMAScript,
+0
(a.k.a. positive zero) is positive.-0
(a.k.a. negative zero) is negative.
+0
不是正数; -0
不是负数。从概念上讲,它们都表示数字零 或者,当发生下溢时,任何数量级太小而无法用可用的有限位数表示的数字。
+0
和 -0
的决定更多来自 IEEE 而不是 ECMA。
如果您不区分代表数学值 0 的 文字 +0
和 -0
,以及 values +0
和 -0
,分别是内存中的表示:
- 从 0 到最小正实数的任何数学值,可以存储在双精度 64 位数据格式中
- 从双精度64位数据格式可以存储的最大负实数到0的任意数学值
如果你有一个变量包含 Number
实例 -0
,这可能代表实数 0(显然没有符号),或者它可能代表实数 10^ -10000。
如果你在代码中看到文字 -0
或+0
,这将被解释为实数0,存储(就像任何足够小但实际上不是 0 的实数)如 Number
-0
或 +0
,视情况而定。
以下是规范中的一些相关部分,希望能澄清一些问题:
术语 "positive number" 和 "negative number" 确实在 ECMAScript 规范中定义:
The Number type has exactly 18437736874454810627 (that is, 264−253+3) values [...]
The 9007199254740990 (that is, 253−2) distinct “Not-a-Number” values of the IEEE Standard are represented in ECMAScript as a single special NaN value [...]
There are two other special values, called positive Infinity and negative Infinity [...]
The other 18437736874454810624 (that is, 264−253) values are called the finite numbers. Half of these are positive numbers and half are negative numbers; for every finite positive Number value there is a corresponding negative value having the same magnitude.
因此,
- 由于
+0
和-0
是这些有限数中的两个,因此每个都必须是正数或负数。 - 由于每个有限的正数都必须有一个负数对应,所以
+0
是正数而-0
是负数,或者相反。 - 如果正零是负数,负零是正数,那就太天真了。所以我们可以(大概)假设
+0
是正数,-0
是负数。
但是,根据下面,+0
和-0
都不能为负数:
The mathematical function abs(x) yields the absolute value of x, which is −x if x is negative (less than zero) and otherwise is x itself.
事实上,在大多数情况下,规范似乎区分了变量为正或负的情况与变量为零的情况。例如,
The mathematical function sign(x) yields 1 if x is positive and −1 if x is negative. The sign function is not used in this standard for cases when x is zero.