Я пытаюсь округлить число до следующей наименьшей степени другого числа. Я не знаю, в каком направлении он округляется, но я предпочитаю нисходящий, если это возможно.
Число x
, которое я округляю, будет удовлетворять: x > 0
и обычно вписывается в диапазон 0 < x <= 1
. Лишь в редких случаях оно будет выше 1.
В более общем плане, моя проблема: Учитывая число x
, как я могу округлить его до ближайшей целой степени некоторой базы b
?
Я бы хотел иметь возможность округляться до произвольных оснований, но больше всего меня сейчас интересуют основание 2 и дробные степени 2, такие как 2 ^ (1/2), 2 ^ (1/4 ), и так далее. Вот мой текущий алгоритм для базы 2.
double roundBaseTwo(double x)
{
return 1.0 / (1 << (int)((log(x) * invlog2))
}
Буду признателен за любую помощь!