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

#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不能设置为其值下面是当我要求打印MINMAXPMAXP的值时得到的结果:
 MAXP = 4.940656e-324
 MIN = 1.000000e-05
 MAX = 1.000000e+00

我真的不明白为什么我会得到这样的问题,我从来没有这样的问题。另外,当我写4.940656e-324时,我会得到MAXP我用gcc编译,有人知道吗?

最佳答案

问题不在于MAXP的值,而在于用于打印的格式说明符%e
MAXP不是变量,而是宏因此,它没有与之关联的类型编译器根据上下文计算出1000的类型,在printf的情况下,这意味着int(默认的1000解释)在不同的上下文中,可以将1000解释为floatdouble,例如float f = MAXP;需要记住的一件重要事情是MAXP在代码体中被1000替换为文本。
如果您希望MAXP在默认情况下被解释为double,请在末尾添加.0

#define MAXP 10000.0

如果希望它保持整数文本,请使用%d打印它
printf(" MAXP = %d  \n", MAXP);

或者添加显式转换:
printf(" MAXP = %e  \n", (double)MAXP);

关于c - 代码未设置标题中由#define定义的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47458560/

10-11 20:53