我正在尝试传递一个找到根的数字
我尝试将这段代码运行到在线编译器上,但得到的随机数不是我用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));
}
您知道实际上在无限循环中至少可以正常工作了
答案 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;
}
您还应该将宏参数放在括号中