【问题标题】:Numbers System in javascriptsjavascript中的数字系统
【发布时间】:2016-07-26 06:33:44
【问题描述】:

除以零在 JavaScript 中不是错误:它只是返回无穷大或负数 无穷。然而,有一个例外:零除以零并没有很好- 定义的值,此操作的结果是特殊的非数字值,打印 作为 NaN 。如果您尝试将无穷大除以无穷大,或者在 JavaScript 中取负数的平方根,或者使用带有非数字操作数的算术运算符,也会出现 NaN 不能转换成数字。 例如

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

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

零是数字,一也是数字?

我想要解释?为什么这种情况只发生在 JavaScript 中?

【问题讨论】:

  • 因为并非 js 中的所有内容都有意义。这就是我们编写库的原因。 :P
  • 在否决这个问题之前,您必须了解我要问的问题?
  • 我投了赞成票,我不是 dv 的人。评论是因为我自己很好奇。所以我明天要回来检查一下。
  • 你期待什么输出?不明确的?但未定义在编程语言中意味着完全不同的东西。

标签: javascript numbers


【解决方案1】:

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

大多数事物不允许除以 0 的原因是因为它们无法处理无限运算 - 您不希望每次尝试在计算器上除以 0 时计算机都会崩溃。

This is a good video showing the above。一个只知道加法/减法规则的旧机械计算器(实际上就是所有乘法/除法)。它永远不会停止运行,因为它可以一直减去 0。

JavaScript 试图对非数学专家的程序员友好。

Read more about the IEEE 754 design rational.

【讨论】:

  • 是的,这是真的吗?当我这样做 0/0 那么它显示 NAN 为什么?
  • 这——这个确切的链或论点——是标准存在的原因。当对答案有不同的解释(例如 0/0 或 0^0)时,该标准可以指导实施者并保护用户。并不是答案在主观上是否正确(尽管希望它在客观上是正确的),而是存在一个预期的、可重复的、可靠的结果,用户可以依赖它。
  • @HopefullyHelpful——你没有抓住重点。在简单的数学中,除以零的结果没有定义的结果,没有无穷大或任何其他值。在某些编程语言中,它会引发错误。检查 NaN (这表明错误的操作)比检查 Infinity (没有)要容易得多。无穷大不是一个数量或值,它只是一个概念,所以甚至不是一个数字。
  • @Andrew — 很高兴接受标准就是标准,我只是在评论(不一定不同意)一个有争议的声明。 ;-)
  • @AkhileshSingh — 纯粹的观点:JavaScript 旨在成为一种易于使用的语言,因此它遵循 IEEE 754 并返回无穷大,而不是除以零引发错误(令人不快)。我(纯属个人)的意见是 NaN 会更好,但无论如何你都应该注意防止除以零,因为你得到的任何东西都可能是不合理的(在口语中,而不是数学意义上)。
【解决方案2】:

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

  1. 在位置数字系统中,位置指示符的意思是“没有这个倍数的单位”。比如十进制数1041,千位有1个单位,百位没有单位,十位有4个单位,1-9位有1个单位。

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

在数学以外的写作中,根据上下文,零的各种外延或内涵含义包括“完全失败”、“缺席”、“零”和“绝对没有”。 (“无”是一个比“零”更抽象的概念,它们的含义有时会相交。)

  1. Brahmagupta 将零的概念发展为一个实际的独立数字,而不仅仅是一个占位符,并编写了从其他数字中添加和减去零的规则。印度的著作被传给了花拉子米(我们从他的名字中得到了算法一词),然后又传给了莱昂纳多·斐波那契和其他人,他们继续发展了这个概念和数字。

点击链接here

【讨论】:

    【解决方案3】:

    讽刺的是,它们也是一个数字:

    typeof NaN;//'number'
    typeof Infinity;//'number'
    

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

    见规范here

    应用 / 运算符

    / 运算符执行除法,产生其操作数的商。左操作数是被除数,右操作数是除数。 ECMAScript 不执行整数除法。所有除法运算的操作数和结果都是双精度浮点数。除法的结果由 IEEE 754 算术规范决定:

    • 如果任一操作数为 NaN,则结果为 NaN。

    • 如果两个操作数的符号相同,则结果的符号为正,如果两个操作数的符号不同,则结果的符号为负。

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

    • 无穷大除以零会产生无穷大。符号由上面已经说明的规则确定。

    • 一个无穷大除以一个非零有限值得到一个有符号无穷大。符号由上面已经说明的规则确定。

    • 一个有限值除以一个无穷大结果为零。符号由上面已经说明的规则确定。

    • 零除以零会导致 NaN;零除以任何其他有限值都会导致零,其符号由上述规则确定。

    • 非零有限值除以零会产生有符号无穷大。符号由上述规则确定。

    • 在其余情况下,既不涉及无穷大、零也不涉及 NaN,则使用 IEEE 754 舍入到最近模式计算商并舍入到最接近的可表示值。如果幅度太大而无法表示,则操作溢出;结果是无限的适当符号。如果幅度太小而无法表示,则运算下溢并且结果是相应符号的零。 ECMAScript 语言需要支持 IEEE 754 定义的逐渐下溢。

    【讨论】:

    • 值必须有Type,可供选择的只有这么多。 ;-)
    • @RobG 对不起,我没能找到你。你想对我说什么?
    【解决方案4】:

    因为 Javascript 遵循 IEEE 754 standard,它定义了浮点运算并指定了这种行为。

    为什么标准将 NaN 指定为这些操作的结果?因为没有给他们合理的价值,所以他们有一个明确定义的不合理的价值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 2019-07-15
      • 2020-10-18
      • 1970-01-01
      相关资源
      最近更新 更多