2

階乗関数は、結果として非常に大きな数を返す可能性があります。

階乗の結果として返される必要があるデータのサイズをどのように計算できますか? 階乗を計算している数 n に基づいて、データのサイズをすばやく取得できる関数はありますか?

たとえば、階乗 (5) = 5 * 4 * 3 * 2 = 120

数値 120 は 120 = 0b1111000 になります。ここで、0b はこれが 2 進数であることを示します。少なくとも、結果を表すには7ビットが必要であり、それを8ビットに収めて1バイトにする可能性があります。

4

1 に答える 1

4

log2(factorial(N))結果を表すのに必要なビット数を得るには、次に大きい数値に切り上げてを計算する必要があります。現在の設定で階乗結果を計算または表現できるかどうかわからない場合は、2 から N までの範囲 (つまり、2 と N を含む) のlog2(i)すべての合計を計算してみてください。i

サンプルとして、 のビット数を計算してみましょうfactorial(5)

log2(120) = 6.906, rounded up become 7 (bits)

そうでなければ、

log2(2) + log2(3) + log2(4) + log2(5) = 6.906, which gives same result
于 2012-11-27T11:33:58.800 に答える