javascripts中的数字系统

Numbers System in javascripts

在javascript中除数不是一个错误:它只返回无穷大或负数。无穷。但是,有一个例外:零除以零没有一个井。-定义值,此操作的结果是打印的特殊非数字值作为楠。如果试图将无穷大除以无穷大,或在负数的javascript根中取平方,或使用具有以下非数字操作数的算术运算符,则也会出现NaN无法转换为数字。例如

1
2
3
1. 0===0 returns True & 1==1 returns true

2. 0/0 returns NaN & 1/1 returns 1

0是数字,1也是数字?

我想要解释?为什么这只发生在javascript中?


因为JavaScript遵循IEEE754标准,该标准定义了浮点运算并指定了这种行为。

为什么标准规定了这些操作的结果是NaN?因为没有合理的价值给他们,所以他们有一个定义明确的无感觉价值。


除以0等于无穷大。这是一个正确的答案(从计算的角度来看,不一定是数学的角度)。想象一下在纸上做除法。您将有无限多的操作,因为您总是在减去0。

大多数事情不允许除以0的原因是因为它们无法处理无限操作-你不会希望你的机器在每次你试图用计算器上的0进行下潜时崩溃。

这是一个很好的视频显示上述内容。一种旧的机械计算器,只知道加法/减法的规则(实际上就是所有的乘法/除法)。它从不停止运行,因为它可以一直减去0。

javascript试图对不是数学专家的程序员友好。

阅读更多关于IEEE754DesignRational的信息。


具有讽刺意味的是,它们也是一个数字:

1
2
typeof NaN;//'number'
typeof Infinity;//'number'

要回答您的关键问题,这就是JavaScript的工作原理。

请参阅此处的规范

应用/运算符

The / operator performs division, producing the quotient of its operands. The left operand is the dividend and the right operand is the divisor. ECMAScript does not perform integer division. The operands and result of all division operations are double-precision floating-point numbers. The result of division is determined by the specification of IEEE 754 arithmetic:

  • 如果任一操作数为NaN,则结果为NaN。
  • 如果两个操作数具有相同的符号,则结果的符号为正;如果两个操作数具有不同的符号,则结果的符号为负。

  • 无穷大除以无穷大得到NaN。

  • 无穷大被零除后得到无穷大。标志由上述规则决定。

  • 用一个非零的有限值除一个无穷大得到一个有符号无穷大。标志由上述规则决定。

  • 将有限值除以无穷大会得到零。标志由上述规则决定。

  • 将零除以零得到NaN;将零除以任何其他有限值得到零,符号由上述规则确定。

  • 将非零有限值除以零会得到有符号无穷大。标志由上述规则决定。

  • 在其余的情况下,既不涉及无穷大,也不涉及零,也不涉及NaN,则使用ieee 754 round to nearest模式计算商并四舍五入到最接近的可表示值。如果量值太大而无法表示,则运算溢出;结果是相应符号的无穷大。如果量值太小而无法表示,则运算下溢,结果为适当符号的零。ECMAScript语言需要支持IEEE754定义的渐进下溢。


在数学中,用数字字符0表示的零是:

  • 在位置数系统中,表示"没有这个倍数的单位"的位置指示符。例如,在十进制1041中,千位有一个单位,百位没有单位,十位有四个单位,1-9位有一个单位。

  • 介于+1和-1之间的独立值。

  • 在数学之外的写作中,根据上下文的不同,零的各种表示或隐含意义包括"完全失败"、"缺席"、"零"和"绝对没有"。"没有"是比"零"更抽象的概念,它们的含义有时是交叉的。)

  • 布拉马库塔发展了零的概念,作为一个实际的独立数字,而不仅仅是一个位置持有者,并编写了规则,从其他数字加减零。印度的著作被传给了al-khwarizmi(我们从他的名字中衍生出术语algorithmi),然后传给了Leonardo Fibonacci和其他继续发展这个概念和数字的人。
  • 点击此处链接