2012-11-27 1 views
1

В результате факторная функция может вернуть очень большое число.Как определить, сколько бит результат факториала должен занимать число?

Как я могу определить размер данных, которые должны быть возвращены в результате факториала? Есть ли функция, которая может дать мне размер данных быстро, исходя из числа n, для которого мы вычисляем факториал?

Например, факториала (5) = 5 * 4 * 3 * 2 = 120

Число 120 будет 120 = 0b1111000, где 0b указывает на то, что это двоичное число. По крайней мере, мне нужно 7 бит для представления результата и вероятности, которые я хотел бы поместить в 8 бит, чтобы быть байтом.

ответ

2

необходимо вычислить log2(factorial(N)), округляя до следующего более высокого номера, чтобы получить количество бит, необходимое для представления результата. если вы не уверены, можете ли вы вычислить или представить факторный результат с вашей текущей настройкой, вы можете попытаться рассчитать сумму log2(i) для всех i в диапазоне от 2 до N включительно (включая 2 и N, то есть).

в качестве образца, давайте вычислить количество битов для factorial(5):

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

otheriwise,

log2(2) + log2(3) + log2(4) + log2(5) = 6.906, which gives same result 
Смежные вопросы