как исправить мой параметр, чтобы он получил правильное значение - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь передать число и найти его корень

Я попытался запустить этот код для онлайн-компилятора, и я получил случайные числа, которые я не ввел с scanf. Я попробовал это на онлайн-компиляторе, который можно найти здесь https://www.onlinegdb.com/online_c_compiler#. По какой-то причине, что бы я ни положил, я получаю 8. Я также попробовал это в DEV-C ++, который можно найти здесь https://sourceforge.net/projects/orwelldevcpp/, в этом компиляторе, я всегда получаю 0 вместо моего входного числа. Существует также printf для подтверждения scanf, и мне кажется, что значение фактически становится моим вводом, но когда я вызываю функцию, все меняет любые идеи (спасибо за ваше время)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define g(x,num) 1.0/3.0*(2.0 * x + (num / x)) //f'(x,num)
#define var 1E-10//10^-10
#define f(x,num) x*x - num


double x;
int i;
double num;

void sqrtNR(double num){// **actual bug**

        printf ("\nnum: %d\n", num);
    x = num;
    printf ("x: %d\n", x);

for(i;var < fabs(f(x,num)) ; i++) {  **infinite loop**
    x = x - ( f(x,num)/g(x,num) );
//  printf ("x: %d\n", x);

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

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

    printf("dwse ari9mo\n");
    scanf("%lf", & num);
    printf("%lf", num);
    sqrtNR(num);
    //printf("\nsrtNR : %lf", sqrtNR(num));

    }

на самом деле вы знаете, по крайней мере, потому что теперь он работает на бесконечном цикле

1 Ответ

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

Ваш формат printf неправильный и вызывает UB.

Абстрагируясь от математической логики вашей функции.

void sqrtNR(double num)
{
    printf ("\nnum: %f\n", num);
    x = num;
    printf ("x: %f\n", x);

    while(var < fabs(f(x,num))
    {
        x = x - ( f(x,num)/g(x,num) );                          
    }
    return x;
}

вы также должны поместить параметры макроса в скобки

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