Почему там результат ноль, а не правильный sqrt? - PullRequest
0 голосов
/ 17 декабря 2018

Как и в заголовке, когда я хочу узнать результат '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 голосов
/ 17 декабря 2018

Вы ничего не возвращаете из своей функции.Я думаю, что вы хотели сказать:

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

Несколько примечаний в вашем коде:

Это:

ierwiastek(liczba);

не имеет никакого эффекта, так какфункция передает liczba по значению, и вы нигде не сохраняете возврат функции, что не имеет смысла.Обычно вы должны сделать:

double result = pierwiastek(liczba);

Здесь:

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

Я не то, что вы хотите сказать, а вызов функции и передача ее результата другому вызову функциита же функция, кажется немного необычной.Я бы посоветовал вам еще раз подумать над этой строкой кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...