unsigned int a = 4294967295; // (2^32)-1
unsigned int b = 2;
2つの符号なし整数の積の上位32ビットを得る最も効率的な方法を理解しようとしています。 たとえば、CUDAプログラミングを使用して私はちょうどunsigned int first32bits = __umulhi(a,b)
になり、上位32ビットを得ることができます。2つの符号なし整数の積の上位32ビットを得る効率的な方法C++
C++でこのようなことを行う方法はありますか?ここで
は私のアプローチです:
unsigned long c = (((unsigned long)a * (unsigned long)b) >> 32) & 0x00000000FFFFFFFF;
はより速く私のアプローチを作るために任意の方法はありますか?
標準のC++では、これを効率的に行うためのツールが提供されているとは思いません。あなたは、CUDAのために発見したもののような独自の方法を見る必要があります。 –
"最も効率的" ..プラットフォームに関する情報は一切提供していません。正しいコードを書いて、それが実際のボトルネックがどこにあるかを知るのに十分な速さでない場合はプロファイルしてください。 – xaxxon
@ xaxxon私は自分のコードを含めました。 –