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时才会发生异常。