Возможно, вам придется изменить round () в зависимости от того, как вы определяете «ближайший».
@ Ответ Грега Хьюгилла верен, за исключением того, что он слишком рано округляется для приведенных вами примеров. Например, 10 ^ round (log_10 (3.5)) == 10, а не 1. Я предполагаю, что он имеет в виду «как вы определяете« ближайший »».
Вероятно, самый простой способ использовать формулу Грега, и если она слишком высока (или слишком мала для x <1), используйте следующую меньшую степень, равную двум: </p>
closest = n ^ round(log_n(x))
if (closest > x) {
other = closest / n
} else {
other = closest * n
}
if (abs(other - x) < abs(closest - x)) {
return other
} else {
return closest
}