любая идея, почему х достигает 0, а затем нан - PullRequest
0 голосов
/ 17 января 2019

Я сделал новый #define g(x), который не работает должным образом, когда я печатаю x, а num - это число int, большее (>) из 2

Я попытался напечатать свой #define g(x), но безуспешно

Код ниже:

#define g(x,num) 1/3*(2 * x + (num / x))
#define f(x,num) x*x - num
#define var 1E-12 //(1E-12 = 10^-12)

double x;
int i;
double num;

double srt(double num) {
     x = num; 


    for(i; abs(f(x,num)) > var ;i++) {


     x = g(x,num);
      printf ("x: %f\n", x);

                        }   
    printf ("counter %d\n", i);             
    return x;
}

int main(int argc, char** argv) {

    printf("give number\n");
    scanf("%lf", &num);
    printf ("your number is num: %lf\n", num);
    printf("srt : %lf", srt(num));
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Другая проблема

int math

Код использует int abs(int), когда требуется double fabs(double).

// for(i; abs(f(x,num)) > var ;i++) {
for(i; fabs(f(x,num)) > var ;i++) {

Хорошие включенные компиляторы часто предупреждают о таких легко обнаруживаемых проблемах, включая этот . Неправильное использование инструментов является ключевой проблемой.

Экономия времени, включение всех предупреждений .

0 голосов
/ 17 января 2019

Проблема в вашем макросе:

#define g(x,num) 1/3*(2 * x + (num / x))

В C 1/3 оценивается как целочисленное деление и поэтому всегда будет иметь значение 0. Чтобы решить эту проблему, нужно сделать хотя бы один литерал double вместо int:

#define g(x,num) 1.0/3.0*(2.0*x + (num/x))
...