c - 知道为什么 x 变为 0 然后为 nan

标签 c user-defined-functions

我制作了一个新的#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/

相关文章:

c - setuid() 返回 0 但没有效果

sql-server - 是否可以使用 Delphi for win32 创建 SQL Server UDF?

java - 确定在 Hive 中创建 UDF 的语言

mysql udf 错误 - 无法在 ubuntu 12.04 64 位中安装

c - 在 C 中初始化结构体 : initializer element is not constant

c - C语言——快速排序

c - 将 makefile 迁移到 Windows 时无法识别通配符

r - 疯狂地尝试编写一个对数据框的一列进行操作的简单函数

php - 我怎样才能清理这个 SELECT 查询?

c - 为什么 Erlang 没有 calloc 的 C NIF 替代品?