代码之家  ›  专栏  ›  技术社区  ›  pulsar_hh

标题中由#define定义的变量不是由代码设置的

  •  1
  • pulsar_hh  · 技术社区  · 8 年前

    我编写了一个非常简单的代码来计算函数的值:

    #define MIN 0.00001
    #define MAX 1
    #define MAXP 10000
    
    
     double func_log(double x)
    {
        double r=RPWN;
    printf(" MAXP = %e  \n",MAXP);
    printf(" MIN = %e  \n",MIN);
    printf(" MAX = %e  \n",MAX);
    
        double y;
        if (x>r || x==0) return(0.0);
        else {
            y = r+((r*r)/(2.*x)-x/2.)*log((1+r/x)/(r/x-1));  
        }
        return y;       
    
    }
    

    那封信在一个文件里。c与其他源文件一起编译。问题是 MAXP 无法设置为其值。当我要求打印出 MIN , 最大功率 最大功率 :

     MAXP = 4.940656e-324  
     MIN = 1.000000e-05  
     MAX = 1.000000e+00
    

    我真的不明白为什么我 4.940656e-324 对于 最大功率 ,我从来没有这样的问题。当我写作的时候 #define MAXP 10000. ,然后我得到 MAXP = 1.000000e+04 . 我用gcc编译,有人有什么线索吗?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Sergey Kalinichenko    8 年前

    问题不在于 MAXP ,但在格式说明符中 %e 你用来打印它的。

    最大功率 不是变量,而是宏。因此,它没有与之关联的类型。编译器计算出 1000 printf 方法 int (默认解释为 1000 ). 在不同的背景下 1000 可以解释为 float 或者 double ,例如。 float f = MAXP; 重要的是要记住 最大功率 文本替换为 1000 在代码主体中。

    如果你想的话 最大功率 要在默认情况下解释为双精度,请添加 .0 最后:

    #define MAXP 10000.0
    

    如果希望它保持整数文字,请使用 %d 打印它

    printf(" MAXP = %d  \n", MAXP);
    

    或添加显式转换:

    printf(" MAXP = %e  \n", (double)MAXP);
    
        2
  •  2
  •   Bastian    8 年前

    问题是 %e 打印浮点型和双精度型,但打印MAXP和MAX-type整数。

    您可以使用 %d 打印整数。