C语言 将一个文字定义为另一个文字的倍数会导致错误的结果



为什么以下代码在分母中使用 4*PI 的文本时给出错误的结果,就像在1.0/FOUR_PI中一样?

#include <stdio.h>
#define PI 3.14159265358979323846
#define FOUR_PI 4.0*PI
int main() {
printf("4.0*PI   = %.20lfn", 4.0*PI);
printf("FOUR_PI  = %.20lfn", FOUR_PI);
printf("4.0*PI - FOUR_PI  = %.60lfn", 4.0*PI - FOUR_PI);
printf("1.0/(4.0*PI) = %.20lfn", 1.0/(4.0*PI));
printf("1.0/FOUR_PI  = %.20lfn", 1.0/FOUR_PI);
return 0;
}

事实证明,在解析文本时,它的表达式被替换到代码中,而不是它的值。也就是说,1.0/FOUR_PI正在被1.0/4.0*PI取代。请参阅以下示例进行说明:

#include <stdio.h>
#define PI 3.14159265358979323846
#define FOUR_PI (4.0*PI)
#define FOUR_PI2 4.0*PI
int main() {
printf("4.0*PI   = %.20lfn", 4.0*PI);
printf("FOUR_PI  = %.20lfn", FOUR_PI);
printf("FOUR_PI2 = %.20lfn", FOUR_PI2);
printf("4.0*PI - FOUR_PI  = %.20lfn", 4.0*PI - FOUR_PI);
printf("4.0*PI - FOUR_PI2 = %.20lfn", 4.0*PI - FOUR_PI2);
printf("1.0/(4.0*PI)  = %.20lfn", 1.0/(4.0*PI));
printf("1.0/FOUR_PI   = %.20lfn", 1.0/FOUR_PI);
printf("1.0/(FOUR_PI) = %.20lfn", 1.0/(FOUR_PI));
printf("1.0/FOUR_PI2  = %.20lfn", 1.0/FOUR_PI2);
return 0;
}

输出为:

4.0*PI   = 12.56637061435917246399
FOUR_PI  = 12.56637061435917246399
FOUR_PI2 = 12.56637061435917246399
4.0*PI - FOUR_PI  = 0.00000000000000000000
4.0*PI - FOUR_PI2 = 0.00000000000000000000
1.0/(4.0*PI)  = 0.07957747154594767280
1.0/FOUR_PI   = 0.07957747154594767280
1.0/(FOUR_PI) = 0.07957747154594767280
1.0/FOUR_PI2  = 0.78539816339744827900

相关内容

最新更新