將實數指數轉為分母為 2 的冪次分數(如分母 1024 = 2^10),對右端點反覆開平方根 10 次得估值。示例代碼處理溢位時動態縮減分母與迭代次數。
double pow(double x, double y) {
int den = 1024, num = (int)(y*den), iterations = 10;
double n = Double.MAX_VALUE;
while (n >= Double.MAX_VALUE && iterations > 1) {
n = x; for (int i=1; i= Double.MAX_VALUE) { iterations--; den/=2; num=(int)(y*den); }
}
for (int i=0; i
利用 ln(y) = b*ln(x),對 ln(x) 用泰勒展開:
ln(x) = (x-1) - (x-1)^2/2 + (x-1)^3/3 - ... (|x-1|<=1)
ln(x) = 1/(x/(x-1)) + 1/(x/(x-1))^2 + ... (|x|>1)
乘指數得 ln(y),再用 e^x = 1 + x + x^2/2! + ... 反解 y。示例代碼完整實現雙級數疊加,含整數指數快速路徑。
表1 對比衰減算法、泰勒級數、Math.sqrt() 三法在多組底數/指數下的誤差。泰勒級數與平方根法對大多數值精度優異(通常達小數點後三位),衰減算法誤差較大。泰勒級數計算週期較少但近零值不穩;平方根法結果穩健。
| 底數,指數 | 實際 | 泰勒級數 | 平方根法 | 衰減算法 |
|---|---|---|---|---|
| 8.0,0.75 | 4.75682846 | 4.74233532 | 4.75682846 | 4.75128682 |
| 8.0,0.667 | 4.002774 | 3.99193551 | 3.99458845 | 3.99445366 |
| 16.0,8.0 | 4294967296 | 4294967296 | 4294967296 | 4294752931 |
| 0.06282,0.325784 | 0.40591915 | 0.41327102 | 0 | 0.06282 |
| 0.000125,0.99556 | 0.00013009 | 627097113 | 0 | 0.000125 |
三種途徑各有優劣。平方根改寫適合大多數應用範圍;泰勒級數或為最佳;衰減算法適合小問題。實際開發必須考慮應用場景、參數範圍、預期精度與資源限制。