-1

これが問題の例です。int basic_block と int block の 2 つの数値があるとします。基本ブロックは 2 の累乗の数値であり、ブロックは basic_block で割り切れる数値です。この例では、basic_block = 128 で block = 640 です。ブロックを 2 のべき乗の異なる数に分割する必要があります。2 つの数値は、basic_block 以上である必要があります。したがって、512 と 128 のようなものになります。この場合、640 より小さい 2 の最大の累乗であるため、最初の数値を 512 として取得する必要があります。

これを行うために使用できる機能はありますか?

4

3 に答える 3

1

C数学ライブラリを使用して、次のことを行います。

function int getBlockSize(int value) {
  return (int)(floor(log2(value)));
}

-lmコンパイラフラグを使用して数学ライブラリにリンクすることを忘れないでください

于 2013-10-13T19:32:10.940 に答える
1

結果が よりも大きくなるまで、2 の累乗をループしますblock。運が良ければ、 (block - 2^(n-1))withの結果(2^n)>blockはさらに 2 の累乗になります。そうでない場合は、 1 にblock-2^(n-1)なるまでこの関数を再実行してくださいblock...

于 2013-09-17T20:33:32.237 に答える
0

これを行うために使用できる機能はありますか?

はい、あなたがそれを行うために書いたものです。

基本的に、数値を合計できる 2 の累乗に再帰的に分解するか、ループで実行する必要があります。

于 2013-09-17T20:33:54.340 に答える