javascript算术溢出

Posted

技术标签:

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

我在看书,遇到了这个

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

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

【问题讨论】:

【参考方案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

以上是关于javascript算术溢出的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 算术

用于执行货币算术的 JavaScript API?

JavaScript 运算符

Javascript 简单布尔算术

javascript 之算术运算(Math对象的运用)

如何将金额类型更改为数字类型以在javascript中执行算术运算