【问题标题】:Exactness of integer division in JSJS中整数除法的精确度
【发布时间】:2019-04-04 09:43:55
【问题描述】:

如果ab 是小于Number.MAX_SAFE_INTEGER 的正整数,并且a 可以被b 整除,那么是否保证console.log(a / b) 将输出一个整数(而不是一个数字以.9999999999) 结尾?另外,a % b === 0 会一直持有吗?

【问题讨论】:

    标签: javascript floating-point precision division


    【解决方案1】:

    至少基于 ECMAScript 标准,applying / operator 的规则提到 该语言不执行整数除法,并且在典型情况下 计算商并四舍五入到最接近的值使用 IEEE 754-2008 舍入到最近的可表示值,与偶数模式相关

    因此,如果分子(在安全范围内)可以被非零分母整除,则结果必然是数学整数,因为IEE 754-2008 可以将其表示为一。

    % 也一样,在这种情况下会产生 0。

    【讨论】:

    • 是的,两个整数的整数商总是可表示的,所以必须产生。同样,% 运算符必须产生零。舍入模式无关紧要。 IEEE 754 格式不代表“整数和浮点值”。它们表示浮点值,其中一些在数学上是整数。
    • @EricPostpischil 感谢您让我对它的理解更加清晰!
    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 2016-04-27
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    相关资源
    最近更新 更多