【问题标题】:overflow in javascript arithmeticjavascript算术溢出
【发布时间】:2021-02-15 20:47:25
【问题描述】:

我在看书,遇到了这个

JavaScript 中的算术在溢出的情况下不会引发错误, 下溢,或除以零。当数值运算的结果 大于最大可表示数(溢出),结果 是一个特殊的无穷大值,Infinity。同样,当绝对 负值的值变得大于绝对值 最大可表示的负数,结果为负 无穷大,- 无穷大。

负数绝对值结果怎么可能导致负数 >

【问题讨论】:

    标签: javascript math absolute-value


    【解决方案1】:

    这不是它所说的。如果|x| > |largest representable negative number| => -infinity 所以如果-10 是最大可表示的负数并且x 是11 那么结果是-infinity

    【讨论】:

    • 这背后是否有合理的原因
    • 我还注意到 >>Math.pow(-3,99) //-1.7179250691067045e+47 。所以 -3 的 99 次方得到一个负的可表示数字(在使用 Math.abs() 时应该将其转换为它的绝对值,并且确实会发生这种情况,即 >>Math.abs(Math.pow (-3,99)) //1.7179250691067045e+47 ,但是 >>Math.pow(-3,999) //-Infinity ,所以这里 -3 的 999 次方是溢出/绕过最大的可表示数字,无论是谁,所以当我得到这个的绝对值时,它应该导致 -infinity ,但它不会 >>Math.abs(Math.pow(-3,999)) //Infinity
    • @polendina 绝对数字永远不会是负数。 Math.abs(-infinity) === infinity
    • @polendina 对我来说,如果溢出用无穷大表示,那么下溢将是 -infinity
    • an absolute number will never be negative 这就是我困惑的原因,正如您解释的那样,作者的意思是if |x| > |largest representable negative number| => -infinity