2017-11-11 110 views
0

我想知道如何使雙打對權力的功能,而不math.h中功能的雙電源沒有math.h中

例如,如果我想

4.3^2.5 
+0

定義你自己的函數來尋找雙倍的力量。找出預定義的pow()如何工作和分析。 – achal

+2

我相信有幾個算法可以做到這一點。你有什麼嘗試?你的嘗試是如何工作的?還是不行?也許你應該花一些時間[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask),並學習如何創建[最小,完整和可驗證示例](http ://stackoverflow.com/help/mcve)?也許你需要[學習如何調試你的程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)? –

+1

[浮點實現pow()函數的最有效方式]的可能重複(https://stackoverflow.com/questions/2664445/the-most-efficient-way-of-implementing-pow-function-in-浮點數) – OznOg

回答

-2
int main(){ 
    int a,b,i,pow=1; 
    scanf("%d %d",&a,&b); 
    for(i=1;i<=b;i++) 
    pow=pow*a; 
    printf("%d",pow); 
} 

變化你的數據類型根據你的需要

+0

以「4.3^2.5」爲例,即使在我們聲明b爲double之後,我們也可以根據你的說法使用for(i = 1; i <= b; i ++)迭代(對於'i'分別等於1和2)給出輸出「4.3^2」,這將是不正確的。 –

1

這是一個粗略的概要。

pow(x, y)在數學上等同於exp(log(x)*y),區別和特殊情況除外。可以用系列來近似log(x)exp(x)

泰勒級數可以從零開始計算。高級實現使用事先爲特定情況預先設計的極小極大多項式的變體。

通常,在計算log時,我們將參數的指數部分與小數部分分開,然後使用多項式近似對數,然後爲指數部分加上對數。

計算exp時,我們將整數和小數部分分開,並乘以它們中的每一個的exp

對於使用基數爲2的浮點數,通常使用基數爲2的對數和指數。然後指數e(代表2 e)的對數簡單地是e

因爲當你這樣做時,你想操縱浮點值的指數部分和有效部分,你必須訪問它們的編碼。 math.h爲此提供例如frexpldexp的例程。要做到這一點沒有math.h,你需要訪問對象的字節,這是另一個堆棧溢出問題的主題。

創建大致正確版本的pow並不難。計算錯誤和證明它們的界限需要大量的工作,並且設計多項式和其他計算以減少錯誤通常是困難的。