[当在1.0/FOUR_PI
中使用分母使用4 * PI时,为什么下面的代码给出错误的结果?
#include <stdio.h>
#define PI 3.14159265358979323846
#define FOUR_PI 4.0*PI
int main() {
printf("4.0*PI = %.20lf\n", 4.0*PI);
printf("FOUR_PI = %.20lf\n", FOUR_PI);
printf("4.0*PI - FOUR_PI = %.60lf\n", 4.0*PI - FOUR_PI);
printf("1.0/(4.0*PI) = %.20lf\n", 1.0/(4.0*PI));
printf("1.0/FOUR_PI = %.20lf\n", 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 = %.20lf\n", 4.0*PI);
printf("FOUR_PI = %.20lf\n", FOUR_PI);
printf("FOUR_PI2 = %.20lf\n", FOUR_PI2);
printf("4.0*PI - FOUR_PI = %.20lf\n", 4.0*PI - FOUR_PI);
printf("4.0*PI - FOUR_PI2 = %.20lf\n", 4.0*PI - FOUR_PI2);
printf("1.0/(4.0*PI) = %.20lf\n", 1.0/(4.0*PI));
printf("1.0/FOUR_PI = %.20lf\n", 1.0/FOUR_PI);
printf("1.0/(FOUR_PI) = %.20lf\n", 1.0/(FOUR_PI));
printf("1.0/FOUR_PI2 = %.20lf\n", 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