什么是“;“正”;以及“;否定的“;ECMAScript中的平均值+0和-0

What do "positive" and "negative" mean in ECMAScript? +0 and -0

本文关键字:ECMAScript 平均值 以及 什么      更新时间:2024-04-21

我正在阅读ECMAScript 5.1规范。它说:

slice方法接受两个参数,startend[…]。如果start为负数,则将其视为length+start其中length是数组的长度。如果end为负数,则将其视为length+endlength,其中length为长度数组的。

"消极"是什么意思?这是有道理的,就像在数学中一样,

  • 如果num > 0,则num为正
  • 如果num < 0,则num为负

+0-0呢?数学中只有一个0,它既不是正的也不是负的。我的猜测是,在ECMAScript中,

  • +0(又称正零点)是正的
  • -0(又称负零点)为负

但我尝试将-0slice一起使用,浏览器将其视为非负面。

那么,+0-0都是非阳性和非阴性的吗?

一个数的正性或负性在哪里定义?我没有在ECMAScript规范中找到定义。这个定义是从IEEE 754继承的吗?

您的困惑在于这一部分:

但是+0-0呢?数学中只有一个0,它既不是正的也不是负的。我的猜测是,在ECMAScript中,

  • +0(又称正零点)为正
  • -0(又称负零点)为负

CCD_ 20不阳性;CCD_ 21不是阴性。从概念上讲,它们都表示数字零,或者,当发生下溢时,表示幅度太小而无法用有限数量的可用比特表示的任何数字

拥有CCD_ 22和CCD_ 23的决定更多地来自IEEE而不是ECMA。

如果不区分文字+0-0(分别表示数学值0)和+0-0(分别表示内存中的

  1. 可以以双精度64位数据格式存储的从0到最小正实数的任何数学值
  2. 从可以以双精度64位数据格式存储的最大负实数到0的任何数学值

如果您有一个包含Number实例-0的变量,它可以表示实数0(显然没有符号),也可以表示实数10^-10000。

如果您在代码中看到文字-0+0,这将被解释为实数0,它被存储(就像任何足够小但实际上不是0的实数一样)为Number -0+0,视情况而定

以下是规范中的一些相关部分,有望澄清问题:

  1. 数字文字
  2. Number
  3. 算法约定
  4. 为什么选择-0===+0

术语"正数"answers"负数"确实在ECMAScript规范中定义:

8.5号码类型

Number类型恰好具有18437736874454810627(即,264−253+3)值[…]

9007199254740990(即253−2)IEEE标准的"非数字"值表示在ECMAScript作为单个特殊NaN值〔…〕

还有另外两个特殊值,称为正无穷大负无限[…]

另一个18437736874454810624(即,264−253)的值称为有限数。其中一半是正数,一半是负数数字;对于每个有限的正数,都有一个具有相同大小的相应负值。

因此,

  • 由于+0-0是这些有限数中的两个,所以每个都必须是正或负
  • 由于每个有限的正数都必须有一个负的对应物,所以+0是正的,-0是负的,或者相反
  • 如果正零是负数,而负零是正数,那就太离谱了。所以我们可以(可能)假设+0是正的,-0是负的

然而,根据以下公式,+0-0都不能为负:

5.2算法惯例

数学函数abs(x)产生x的绝对值,如果x负(小于零),则为−x本身。

事实上,在大多数情况下,规范似乎将变量为正或负的情况与变量为零的情况区分开来。例如,

5.2算法惯例

如果x,则数学函数符号(x)产生1和−1,如果x。符号函数在本标准中不用于x的情况。

因此,规范是矛盾的