math.sqrt(x) 回傳 x 的算術平方根(主平方根),定義域為 x >= 0。本文涵蓋語法、參數、回傳值、錯誤處理、精度考量、複數支援替代方案與常見應用場景。
import math
math.sqrt(x) # x 為非負數值
import math
print(math.sqrt(100)) # 10.0
print(math.sqrt(2)) # 1.4142135623730951
print(math.sqrt(0)) # 0.0
print(math.sqrt(0.25)) # 0.5
print(math.sqrt(math.pi)) # 1.7724538509055159
try:
math.sqrt(-1)
except ValueError as e:
print(e) # math domain error
import cmath
print(cmath.sqrt(-1)) # 1j
print(cmath.sqrt(4)) # (2+0j)
print(cmath.sqrt(2+3j)) # (1.6741492280355401+0.8959774761298381j)
math.sqrt 採用硬體指令(通常為 IEEE 754 sqrt),單精度約 1 ULP 誤差,極快。numpy.sqrt 或 np.ndarray ** 0.5,向量化並支援廣播。int(math.sqrt(n)) ** 2 == n(注意大數精度)。math.hypot(dx, dy)(內部用 sqrt,更穩定)。math.sqrt(variance)。T = 2*math.pi*math.sqrt(m/k)、逃逸速度 v = math.sqrt(2*G*M/r)。z = (x - mu) / sigma、信賴區間邊界。v / math.sqrt(v.x**2 + v.y**2 + v.z**2)。| 寫法 | 優點 | 缺點 |
|---|---|---|
math.sqrt(x) | 語意清晰、速度最快、錯誤訊息明確 | 不支援負數 |
x ** 0.5 | 支援複數(回傳 complex)、可用於任意冪次 | 負數回傳複數可能非預期、略慢 |
pow(x, 0.5) | 同 **,支援三引數模冪 | 同上 |
cmath.sqrt(x) | 完整支援複數、分支切割標準 | 回傳 complex、較慢 |
math.sqrt(4) 回傳 2 (int) → 實為 2.0 (float)。ValueError 導致程式中斷。math.sqrt(10**30) 精度足夠,但 math.isqrt (Python 3.8+) 可精確求整數平方根。
print(math.isqrt(10)) # 3 (floor(sqrt(10)))
print(math.isqrt(100)) # 10
# 適用於大整數完全平方判斷、密碼學等需精確整數根的場合
選對平方根函數(math.sqrt 實數、cmath.sqrt 複數、math.isqrt 整數),並注意定義域與回傳型別,能避免隱性 Bug 並寫出高效能數值代碼。