我在JavaScript中有以下功能:
//foo is a number literal
function MyFunc(foo) {
if(foo%15 === 0) {
console.log("bar");
}
}
我想测试JavaScript中Number
的大小上限或其附近的行为。
现在我知道JavaScript中的Number
是IEEE 64位浮点数。我也知道IEEE浮点数具有次法线的概念,并且它们在非常大(和非常小)的值的数学运算期间显着地失去准确性,因此针对围绕最大正常数进行测试更有意义。 ?
我该如何解决这个问题?
答案 0 :(得分:1)
无论foo%15 == 0
的值位于浮点域中的哪个位置,JavaScript的正确实现都不会遇到任何评估foo
的错误。这主要是因为a%b
的精确数学结果永远不会大于a
且永远不会大于b
,所以它始终处于浮点格式的更精细区域,因此它永远可以表示至少与a
和b
一样精确,这很好,因为从b
减去a
的任意倍数永远不会创建比a
或b
。
次正规仅存在于正常数字的下方(幅度小于),因此前缀“sub”。最大有限法线数是最大有限数。
答案 1 :(得分:0)
根据维基百科,双精度浮点数的最大可表示整数是2 ^ 53(9,007,199,254,740,992)。这可能是我测试的有用上限。
9,007,199,254,740,992%15 === 2 //obviously