测试在JavaScript中接受数字文字的函数的上限

时间:2014-01-06 18:41:16

标签: javascript floating-point

我在JavaScript中有以下功能:

//foo is a number literal
function MyFunc(foo) {
  if(foo%15 === 0) {
    console.log("bar");
  }
}

我想测试JavaScript中Number的大小上限或其附近的行为。

现在我知道JavaScript中的Number是IEEE 64位浮点数。我也知道IEEE浮点数具有次法线的概念,并且它们在非常大(和非常小)的值的数学运算期间显着地失去准确性,因此针对围绕最大正常数进行测试更有意义。 ?

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

无论foo%15 == 0的值位于浮点域中的哪个位置,JavaScript的正确实现都不会遇到任何评估foo的错误。这主要是因为a%b的精确数学结果永远不会大于a且永远不会大于b,所以它始终处于浮点格式的更精细区域,因此它永远可以表示至少与ab一样精确,这很好,因为从b减去a的任意倍数永远不会创建比ab

次正规仅存在于正常数字的下方(幅度小于),因此前缀“sub”。最大有限法线数是最大有限数。

答案 1 :(得分:0)

根据维基百科,双精度浮点数的最大可表示整数是2 ^ 53(9,007,199,254,740,992)。这可能是我测试的有用上限。

9,007,199,254,740,992%15 === 2 //obviously