我制作了一个非常简单的代码来计算函数的值:
#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;
}
该函数位于file.c中,该文件是使用其他源文件编译的。问题是MAXP
无法设置为其值。当我要求打印出MIN
,MAXP
和MAXP
的值时,我会得到以下内容:
MAXP = 4.940656e-324
MIN = 1.000000e-05
MAX = 1.000000e+00
我真的不明白为什么我4.940656e-324
获得MAXP
,我从未遇到过这样的问题。当我写#define MAXP 10000.
时,我得到MAXP = 1.000000e+04
。我用gcc编译,有人有任何线索吗?
答案 0 :(得分:3)
问题不在于MAXP
的值,而在于您用来打印它的格式说明符%e
。
MAXP
不是变量,而是宏。因此,它没有与之相关的类型。编译器从上下文中计算1000
的类型,如果printf
表示int
(1000
的默认解释)。在不同的上下文中,1000
可以被解释为float
或double
,例如float f = MAXP;
要记住的一件重要事情是MAXP
在代码正文中以1000
替换文字。
如果您希望默认情况下将MAXP
解释为double,请在结尾处添加.0
:
#define MAXP 10000.0
如果您希望它保持整数文字,请使用%d
进行打印
printf(" MAXP = %d \n", MAXP);
或添加显式广播:
printf(" MAXP = %e \n", (double)MAXP);
答案 1 :(得分:2)
问题是%e
打印float和double类型,但是你的MAXP和MAX类型是整数。
您可以使用%d
打印整数。