Мне нужно сделать следующий расчет в коде С++:
(((n*log(n)) / log(4)) + 1)
Где n имеет тип unsigned long long int (и является степенью числа 2, поэтому результат должен быть целым числом).
Для очень больших чисел я получаю некоторые ошибки, например, для n = 9007199254740992
результат должен быть 238690780250636289
, но когда я запускаю код, я получаю 238690780250636288
.
Может ли это быть результатом того, что функция «журнал» не имеет реализации с аргументом «unsigned long long int»? Если да, то есть ли способ обойти это без реализации новой функции журнала?
unsigned long long int upToBit(unsigned long long int n) {
unsigned long long int check = (((n*log(n)) / log(4)) + 1);
return check;
}
(((n*log(n)) / log(4)) + 1) = (((n*log(n)) / (2*log(2))) + 1) = n/2 * std::log2(n) + 1
- person nnovich-OK   schedule 01.05.2017