Math.floor() を使用する代わりに、数値を .5 だけ右シフトできると聞きました。その制限を確認して適切な代替品であることを確認することにしたので、次の値を確認し、Google Chrome で次の結果を得ました。
2.5 >> .5 == 2;
2.9999 >> .5 == 2;
2.999999999999999 >> .5 == 2; // 15 9s
2.9999999999999999 >> .5 == 3; // 16 9s
いくつかいじった後、Chrome と Firefox では、2 を 0.5 だけ右にシフトすると 2 になる可能性のある最大値は 2.9999999999999997779553950749686919152736663818359374999999¯ (9 の繰り返し) であることがわかりました。番号は IE では 2.9999999999999997779¯ です。
私の質問は: .000000000000000777955395074968691915273663818359374 という数字の意味は何ですか? とても奇妙な数字で、私の好奇心を刺激しました。
私は答えまたは少なくともある種のパターンを見つけようとしていますが、私の問題は、ビット単位の操作を本当に理解していないという事実にあると思います。原理的には理解できますが、ビット シーケンスを 0.5 ずつシフトすることは、私にはまったく意味がありません。どんな助けでも大歓迎です。
記録のために、奇妙な数字シーケンスは 2^x で変わります。適切に切り捨てられる次の数値の可能な最大値:
0 の場合: 0.9999999999999999444888487687421729788184165954589843749¯ 1 の場合: 1.9999999999999999888977697537484345957636833190917968749¯ 2-3 の場合: x+.99999999999999977795539507496869191527366638183593749¯ 4-7 の場合: x+.9999999999999995559107901499373838305473327636718749¯ 8-15 の場合: x+.999999999999999111821580299874767661094665527343749¯ ...など