2012-03-06 38 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