2013-11-20 18 views
0

我想通過將它分成一個階梯函數,簡單的東西來計算一個簡單的近似積分。當我簡單地嘗試劃分時,問題就開始了。這裏是我的代碼:C - 簡單的除法(1/n)導致奇怪的答案

double integrand(int a, double div, int n) { 
    int i; 
    double sum, val; 

    val = 1.0/div; 

    for(i = 0; i < div; i++) { 
     sum = sum + (pow(i*val, n)/(i*val + a)) * val; 
    } 
    return sum; 
} 

這裏的div實際上是一個整數,我試圖把它納入積函數最初是作爲一個整數,它以類型轉換函數內使用雙,具有相同的結果。當我調試代碼時,div可以說是100,但val會返回一些荒謬的東西,比如-7.2008557565654656e + 304。據我所知,其餘的代碼是正確的,但我無法弄清楚,發生了什麼?!

+0

可能的重複的[奇怪的C除法結果](http://stackoverflow.com/questions/985601/strange-result-of-division-in-c) –

+1

我已經考慮過浮點的可能性不準確,但我沒有想到1/100的結果是任意的。 – user3014043

+0

這個'val = 1.0/div;'給'val'帶來類似'-7.2008557565654656e + 304'的東西嗎? – alk

回答

2

你永遠不會初始化sum

double sum = 0, val; 

現在,你用它在你的計算未初始化的值,從而得到一些無用結果。

+0

現在感覺像一個白癡,似乎不給一個初始值與val搞砸,現在指定就好了。爲廢話問題道歉。 – user3014043

+1

@ user3014043:不用擔心,我們都在那裏,而且比我們想要承認的更頻繁;)。 – FatalError

1

首先初始化sum然後使用它。否則它會調用未定義的行爲