我听说你可以将数字右移一个.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
Run Code Online (Sandbox Code Playgroud)
在一些摆弄之后,我发现两个最高可能的值,当右移0.5时,将产生2,在Chrome和Firefox中是2.999999999999997779553950949686919152736663818359374999999(以及9重复).IE中的数字为2.9999999999999997779.
我的问题是:数字的意义是什么.0000000000000007779553950749686919152736663818359374?这是一个非常奇怪的数字,它真的激起了我的好奇心.
我一直试图找到答案或至少某种模式,但我认为我的问题在于我真的不理解按位操作.我原则上理解这个想法,但是将一个序列移动到.5对我来说根本没有任何意义.任何帮助表示赞赏.
为了记录,奇怪的数字序列以2 ^ x变化.以下数字的最高可能值仍然正确截断:
for 0: 0.9999999999999999444888487687421729788184165954589843749¯ for 1: 1.9999999999999999888977697537484345957636833190917968749¯ for 2-3: x+.99999999999999977795539507496869191527366638183593749¯ for 4-7: x+.9999999999999995559107901499373838305473327636718749¯ for 8-15: x+.999999999999999111821580299874767661094665527343749¯ ...and so forth