問題タブ [floor-division]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
64-bit - 被除数のビットがすべて 1 で、商の 64 LSB だけが必要な場合に、128 ビットの被除数を 64 ビットの除数で割る方法を教えてください。
を計算する必要があります((2^128) - 1) / x
。除数x
は、符号なしの 64 ビット数です。被除数は 2 つの符号なし 64 ビット数値 (上位と下位) で構成され、両方の数値はUINT64_MAX
. 私は64ビットの算術演算しか使用できず、移植可能である必要があります(GNU __int128
、MSCV _udiv128
、アセンブリ、またはそのようなものは使用しません)。商の上位部分は必要ありません。下位 64 ビットのみが必要です。
この操作を行うにはどうすればよいですか?
またx >= 3
、x
は 2 の累乗ではありません。
編集:独自のソリューションを作成しました(以下の回答)。しかし、より良いパフォーマンスを発揮する他のソリューションを歓迎します:)