我做了一个非常简单的代码来计算函数的值:
#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
和MAXP
的值时得到的结果: 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
解释为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);
关于c - 代码未设置标题中由#define定义的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47458560/