2012-03-06 40 views
0

我想創建一個基於阿基米德方程的π近似。我有這樣做的模式和遞歸模式。在模式我創建像上述:Pi近似阿基米德方程

double Pi_approximation(double r, double L){ 

    int i; 
    double fin; 
    double y; 

    for(i=1; i<4; i++){ 

      y =sqrt(2*((r*r) - r*(sqrt(4*((r*r) - (L)))))); 

      L = y; 
      printf("%f \n", L); 
    } 

    return y; 
} 

我的問題是在第二循環的for。在第一個y是正常計算,但在第二個循環中,當我打印y和L時,它會打印我的指針!任何想法?

+0

你可以添加一個你得到的輸出的例子嗎? – Hasturkun 2012-03-06 15:03:24

回答

4

很難確定發生了什麼,但我仍然會猜測!很可能您傳遞給sqrt()調用之一的值爲負值。發生這種情況時,y(因此L)將爲NaN。那麼輸出將依賴於編譯器。例如在我的編譯器輸出:

-1.#IND00 
+0

1.414241 -1。#IND00 -1。#IND00 -1。#IND00 – 2012-03-06 15:06:26

+0

這是C中NaN的對應符號嗎? – 2012-03-06 15:07:19

+0

這證實了我的猜測。你只需要弄清楚你做錯了什麼,導致你將一個負值傳遞給'sqrt()'。 – 2012-03-06 15:07:29

0

你可能已損壞內存泄漏或其他某個部分的相似...... 代碼單獨似乎工作的代碼。

+0

(p.s.我得到了其他的南,但不是一個指針!) – linello 2012-03-06 15:09:33