answer提供了以下代码,仅使用整数即可计算floor(sqrt(x))
。是否可以使用/修改它来返回ceil(sqrt(x))
?另外,计算此值的首选方法是什么?
编辑:到目前为止,谢谢大家,我很抱歉,我应该更明确地说:我希望使用floor(sqrt(x))
可能有更多的“自然”方式,可能还要加上一个。 floor
版本使用牛顿方法从上方接近根,我认为也许从下方或类似角度接近根就可以解决问题。
例如,答案甚至提供了如何舍入到最接近的整数:只需向算法输入4*x
。
答案 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
当前代码的结果。