为什么结果为零,而不是正确的sqrt?

时间:2018-12-17 12:57:48

标签: c function

如标题中所示,当我想知道“ liczba”的结果并且我选择25时,结果是0.0000?问题出在我写评论的选定行中。 感谢您的帮助。

#include <stdio.h>
#include <math.h>
#define ACCURACY (1.e-5) 
double pierwiastek(double liczba);

int main( void ) {

  double liczba;

  for(;;){

    printf("\nPodaj wartosc liczby dodatniej (-1 konczy program):\n");
    scanf("%lf",&liczba);

    if(liczba<0.0) break;

    pierwiastek(liczba);
    printf("\nliczba %20.15lf, zalozona dokladnosc obliczania pierwiastka: %20.15lf\n", 
       liczba, ACCURACY);
    printf("\tpierwiastek liczby: obliczony %20.15lf, dokladny %20.15lf\n", 
       pierwiastek(liczba), sqrt(liczba));//<---- there
      printf("\nPierwiastek z pierwiastka: %lf",pierwiastek(pierwiastek(liczba)));//<-----there

  }
  return 0;
}

double pierwiastek(double liczba)
{
    double pierwiastek = 1.0f;
    double temp;
    //wzor Herona
    do{
      temp = pierwiastek;
      pierwiastek = 0.5f * (temp + liczba/temp);

    } while(fabs(pierwiastek*pierwiastek - liczba)/liczba > ACCURACY); 

}

1 个答案:

答案 0 :(得分:7)

您不会从函数中返回任何内容。我想你是说:

double pierwiastek(double liczba)
{
  ..
  return pierwiastek;
}

不过,代码中有一些注释:

此:

ierwiastek(liczba);

无效,因为该函数按值传递liczba,并且您没有将函数的返回值存储在任何地方,这没有任何意义。通常,您会这样做:

double result = pierwiastek(liczba);

这里:

printf("\nPierwiastek z pierwiastka: %lf", pierwiastek(pierwiastek(liczba)));

我不是要说什么,但是调用该函数并将其结果传递给同一函数的另一个函数调用似乎有点不寻常。我建议您再次考虑该行代码。