如何修正我的参数,使其获得正确的值

时间:2019-01-19 12:01:24

标签: c parameters

我正在尝试传递一个找到根的数字

我尝试将这段代码运行到在线编译器上,但得到的随机数不是我用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 :(得分:0)

您的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;
}

您还应该将宏参数放在括号中