問題タブ [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.

0 投票する
2 に答える
74 参照

64-bit - 被除数のビットがすべて 1 で、商の 64 LSB だけが必要な場合に、128 ビットの被除数を 64 ビットの除数で割る方法を教えてください。

を計算する必要があります((2^128) - 1) / x。除数xは、符号なしの 64 ビット数です。被除数は 2 つの符号なし 64 ビット数値 (上位と下位) で構成され、両方の数値はUINT64_MAX. 私は64ビットの算術演算しか使用できず、移植可能である必要があります(GNU __int128、MSCV _udiv128、アセンブリ、またはそのようなものは使用しません)。商の上位部分は必要ありません。下位 64 ビットのみが必要です。

この操作を行うにはどうすればよいですか?

またx >= 3xは 2 の累乗ではありません。

編集:独自のソリューションを作成しました(以下の回答)。しかし、より良いパフォーマンスを発揮する他のソリューションを歓迎します:)