Integer ceil (sqrt (x))

Afloor (SQRT (х)) swer дает следующий код для вычисления , ceil(sqrt(x))используя только целые числа. Можно ли floor(sqrt(x))вместо этого использовать / изменить его ? В качестве альтернативы, каков предпочтительный способ вычисления такой ценности?

Редактировать: Спасибо всем, что до сих пор, и я извиняюсь, я должен был сделать это более эффектно: я надеялся, что есть более «естественный» способ сделать это, используя 4*x, возможно, плюс один. В xверсии используется метод Ньютона, чтобы приблизиться к корню сверху, я подумал, что, возможно, приближаясь к нему снизу или подобному, это будет трюк.

Например, ответ даже предусматривает, как округлить до ближайшего целого числа: просто введите result = floorsqrt(x) if result * result != x: result += 1 в алгоритм.

math,integer,square-root,

6

Ответов: 2


6 ов принято

Если xэто точный квадрат, потолок и пол квадратного корня равны; в противном случае потолок будет больше, чем квадратный корень. Таким образом, вы можете использовать (в Python),

floor(x) = (ceil(x) - 1) if x 
ot in Z else ceil(x)

Изменение кода, с которым вы связаны, не является хорошей идеей, поскольку в этом коде используются некоторые свойства метода вычисления квадратного корня Newton-Raphson. Об этом методе была разработана большая теория, и этот код использует эту теорию. Код, который я показываю, не так хорош, как изменение связанного кода, но он безопаснее и, вероятно, быстрее, чем изменение кода.


0

Вы можете использовать этот факт:

N

Следовательно, проверьте, есть ли Nв форме 2^k, код тот же, а если нет, вы можете получить -1результат текущего кода.

математика, целое число, квадратный корень,
Похожие вопросы