是否为任何`a`保证`Math.floor(a / a)== 1`使得`a / a'不是NaN?

时间:2018-10-27 23:42:10

标签: javascript floating-point precision

考虑到浮点不精确性,对于任何a的任意数值(除法运算a / a返回一个数值),是否可以保证该方程式成立?

Math.floor(a / a) == 1

2 个答案:

答案 0 :(得分:4)

IEEE 754指定运算结果是精确的数学结果,四舍五入到最接近的可表示值(在用户可以指定的方向上,向上,最接近,依此类推)。当精确的数学结果可表示时,它是最接近的值,并且不进行舍入,因此结果是精确的。因此,只要没有发生异常,a/a就是1。

如果我没记错的话,JavaScript不允许实现使用过高的精度(例如C)。因此a/a的评估符合预期。那么Math.floor(a/a)为1,而Math.floor(a/a) == 1为true。

答案 1 :(得分:1)

让我们尝试一下

test(1);
test(0);
test(1E10000000000000000000)

function test(a) {
  console.log(a, Math.floor(a/a));
}

答案:否