我听说您可以将数字右移 0.5 而不是使用 Math.floor()。我决定检查它的限制以确保它是合适的替代品,因此我检查了以下值并在 Google Chrome 中得到以下结果:
2.5 >> .5 == 2;
2.9999 >> .5 == 2;
2.999999999999999 >> .5 == 2; // 15 9s
2.9999999999999999 >> .5 == 3; // 16 9s
经过一番摆弄,我发现在 Chrome 和 Firefox 中,当右移 0.5 时,将产生 2 的最大可能值为 2.9999999999999997779553950749686919152736663818359374999999¯(重复 9)。IE中的数字是2.9999999999999997779¯。
我的问题是:数字 .0000000000000007779553950749686919152736663818359374 的意义是什么?这是一个非常奇怪的数字,它真的激起了我的好奇心。
我一直在尝试找到答案或至少某种模式,但我认为我的问题在于我真的不了解按位运算。我原则上理解这个想法,但是将位序列移动 0.5 对我来说根本没有任何意义。任何帮助表示赞赏。
为了记录,奇怪的数字序列随着 2^x 的变化而变化。以下数字中仍能正确截断的最高可能值:
对于 0:0.9999999999999999444888487687421729788184165954589843749¯ 对于 1:1.9999999999999999888977697537484345957636833190917968749¯ 对于 2-3:x+.99999999999999977795539507496869191527366638183593749¯ 对于 4-7:x+.9999999999999995559107901499373838305473327636718749¯ 对于 8-15:x+.999999999999999111821580299874767661094665527343749¯ ...等等