You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python平方根函数实现中step取epsilon平方的原因咨询

x = 25
epsilon = 0.01
step = epsilon**2
numGuesses = 0
ans = 0.0
while abs(ans**2 - x) >= epsilon and ans <= x:
    ans += step
    numGuesses += 1
print('numGuesses =', numGuesses)
if abs(ans**2 - x) >= epsilon:
    print('Failed on square root of', x)
else:
    print(ans, 'is close to square root of', x)

以上是《Python计算与编程导论》一书中的穷举法求平方根实现,关于step = epsilon**2的取值推导逻辑如下:

  • 算法的核心目标是找到满足|ans² - x| < epsilon的近似解,epsilon是我们允许的平方误差阈值,本例中为0.01。
  • 这是线性穷举算法,每次给候选值ans加固定步长step,要保证步长足够小,不会一步跨过符合误差要求的区间,导致漏判(明明存在符合要求的解,却返回查找失败)。
  • 我们可以计算步长带来的平方值增量:(ans + step)² - ans² = 2*ans*step + step²,这个增量必须小于epsilon,才能保证不会漏解。
  • 作者选择了非常保守、无需额外预计算的步长取值:直接取step为epsilon的平方,也就是0.0001。代入本例x=25的场景,候选值ans最大不超过5,平方增量最大值约为2*5*0.0001 = 0.001,远小于epsilon=0.01,完全可以保证不会跳过符合要求的解。就算x取到100以内的数值,这个步长带来的平方增量都不会超过0.002,依然满足要求,适用范围很广。
  • 这个取值的优势是实现简单,不需要提前估算x的平方根范围,非常适合入门教学场景。

内容的提问来源于stack exchange,提问作者Walid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:24:00