2017-04-25 57 views
1

我有這個代碼爲我創建的電源功能,我被告知有辦法將兩個for循環(一個用於正數,一個用於負指數)並使用有條件的運營商需要一個更好的方式來編寫一個電源功能

double myPow(double base, int exponent) { 
    double result = 1; 
    for (int i = 0; i < exponent; i++) { 
     result *= base; 
    } 
    for (int i = 0; i > exponent; --i) { 
     result /= base; 
    } 
    return result; 
} 

任何關於從哪裏開始的建議?

+6

這應該去[**代碼審查**](HTTPS ://codereview.stackexchange.com/) –

+4

我投票結束這個問題作爲題外話題,因爲它應該在代碼審查,但由於某種原因,這個愚蠢的對話框仍然沒有它。 –

+1

嘿,這不是愚蠢的。 –

回答

1

這個怎麼樣?

double myPow(double base, int exponent) { 
    double result = 1; 
    if (exponent < 0) { 
     exponent = -exponent; 
     base = 1/base; 
    } 
    for (int i = 0; i < exponent; i++) { 
     result *= base; 
    } 
    return result; 
} 
+0

這是一個難以解決的難題。見Knuth Vol 2 4.6.4「權力評估」。算法A對你來說是一個好的開始。 –

+0

不,因爲我們可以通過觀察它是((((((x^2)^ 2)^ 2)^ 2)^ 2)^ 2)^ 2)^ 2)來優化x^256,所以我們只需要8平方的操作。 –

0

你可以得到指數循環絕對值,然後使用條件運算符做循環內的操作:

double result = 1; 
int absExp = std::abs(exponent); 
for (int i = 0; i < absExp; i++) { 
    exponent < 0 ? // division : // multiplication 
} 
+0

@Quentin呃。 –

+0

謝謝,我試圖在這樣的事情上工作。 – rchkrvr2

相關問題