Javascript 对于任何'a','Math.floor(a/a)==1',是否保证'a/a'不是NaN?

Javascript 对于任何'a','Math.floor(a/a)==1',是否保证'a/a'不是NaN?,javascript,floating-point,precision,Javascript,Floating Point,Precision,考虑到浮点不精确性,该等式是否保证对a的任意数值为真,对于该数值,除法运算a/a返回一个数值 Math.floor(a / a) == 1 IEEE 754规定,运算结果是精确的数学结果,四舍五入到最接近的可表示值(用户可以指定向上、最近等方向)。当精确的数学结果可以表示时,它是最近的值,并且没有舍入,因此结果是精确的。因此,每当未发生异常时,a/a为1 如果我没记错的话,JavaScript不允许实现使用过多的精度(例如,C)。因此,a/a按预期进行评估。然后Math.floor(a/a)为

考虑到浮点不精确性,该等式是否保证对
a
的任意数值为真,对于该数值,除法运算
a/a
返回一个数值

Math.floor(a / a) == 1

IEEE 754规定,运算结果是精确的数学结果,四舍五入到最接近的可表示值(用户可以指定向上、最近等方向)。当精确的数学结果可以表示时,它是最近的值,并且没有舍入,因此结果是精确的。因此,每当未发生异常时,
a/a
为1


如果我没记错的话,JavaScript不允许实现使用过多的精度(例如,C)。因此,
a/a
按预期进行评估。然后
Math.floor(a/a)
为1,并且
Math.floor(a/a)==1
为真。

IEEE 754指定操作的结果是精确的数学结果,四舍五入到最接近的可表示值(用户可以指定向上、最近的方向,等等)。当精确的数学结果可以表示时,它是最近的值,并且没有舍入,因此结果是精确的。因此,每当未发生异常时,
a/a
为1

如果我没记错的话,JavaScript不允许实现使用过多的精度(例如,C)。因此,
a/a
按预期进行评估。那么
Math.floor(a/a)
是1,而
Math.floor(a/a)==1
是真的。

让我们试试看

测试(1);
试验(0);
测试(1E100000000000000000)
功能测试(a){
控制台日志(a,数学层(a/a));
}
让我们试试看

测试(1);
试验(0);
测试(1E100000000000000000)
功能测试(a){
控制台日志(a,数学层(a/a));

}
当a为0时,你试过这个吗?
数学。地板(Number.POSITIVE_∞/Number.POSITIVE_∞)是
NaN
(与
Number.NEGATIVE_∞相同)我指的是
a
是数字的任何
a
。(添加到问题中)请注意
a/a!=由于NaN的特殊属性,NaN
总是正确的。@ScottSauyet:问题标题当前指定了“任意
a
,使得
a/a!=NaN
”,这在技术上与“任意
a
”的意思相同。(幸运的是,OP的本意很清楚,这没什么大不了的;但为了教育起见,我认为值得指出。)当a为0时,你试过这个吗?
Math.floor(Number.POSITIVE_INFINITY/Number.POSITIVE_INFINITY)
NaN
(与
Number.NEGATIVE_INFINITY
相同)我指的是任何
a
,其中
a/a
是一个数字。(添加到问题中)请注意
a/a!=由于NaN的特殊属性,NaN
总是正确的。@ScottSauyet:问题标题当前指定了“任意
a
,使得
a/a!=NaN
”,这在技术上与“任意
a
”的意思相同。(幸运的是,OP的意图很清楚,这不是什么大问题;但为了教育起见,我认为值得指出。)并且,只有
a
为+/-0、+/-Inf或NaN时才会发生异常。只有
a
为+/-0、+/-Inf或NaN时才会发生异常。