整数ceil(sqrt(x))

时间:2018-07-08 16:00:16

标签: math integer square-root

answer提供了以下代码,仅使用整数即可计算floor(sqrt(x))。是否可以使用/修改它来返回ceil(sqrt(x))?另外,计算此值的首选方法是什么?

编辑:到目前为止,谢谢大家,我很抱歉,我应该更明确地说:我希望使用floor(sqrt(x))可能有更多的“自然”方式,可能还要加上一个。 floor版本使用牛顿方法从上方接近根,我认为也许从下方或类似角度接近根就可以解决问题。

例如,答案甚至提供了如何舍入到最接近的整数:只需向算法输入4*x

2 个答案:

答案 0 :(得分:6)

如果x是一个精确的平方,则平方根的上限和下限相等;否则,天花板比平方根大一倍。因此,您可以使用(在Python中)

result = floorsqrt(x)
if result * result != x:
    result += 1

修改链接的代码不是一个好主意,因为该代码使用了计算平方根的Newton-Raphson方法的某些属性。关于该方法的许多理论已经开发出来,并且代码使用了该理论。我显示的代码不像修改链接的代码那样整洁,但比更改代码更安全,而且可能更快。

答案 1 :(得分:0)

您可以使用以下事实:

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

因此,检查N是否为2^k形式,代码是否相同,如果不是,则可以-1当前代码的结果。