我制作了一个新的#define g(x)
,当我打印 x 并且 num 是 number int Greater(>) of 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;
}
最佳答案
问题出在你的宏中:
#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))
关于c - 知道为什么 x 变为 0 然后为 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54241935/