这段代码:
#include <stdio.h>
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
int main(void)
{
for (int i = 0; i < 20; i++)
{
float abs_yaw = 0.022 + (i / 4000.0);
float result = (21.0F - ((13.5F / 0.035F) * (MIN(abs_yaw, 0.06F) - 0.025F)));
printf("%2d: %6.4f yields %10.6f\n", i, abs_yaw, result);
}
return 0;
}
在 Mac OS X 10.7.4 上使用 GCC 4.7.1 生成这些结果。
0: 0.0220 yields 22.157143
1: 0.0223 yields 22.060715
2: 0.0225 yields 21.964285
3: 0.0227 yields 21.867857
4: 0.0230 yields 21.771429
5: 0.0233 yields 21.674999
6: 0.0235 yields 21.578571
7: 0.0237 yields 21.482143
8: 0.0240 yields 21.385714
9: 0.0243 yields 21.289286
10: 0.0245 yields 21.192858
11: 0.0247 yields 21.096428
12: 0.0250 yields 21.000000
13: 0.0253 yields 20.903572
14: 0.0255 yields 20.807142
15: 0.0258 yields 20.710714
16: 0.0260 yields 20.614286
17: 0.0262 yields 20.517859
18: 0.0265 yields 20.421429
19: 0.0268 yields 20.325001
您可以对其进行调整以磨练您的价值观,但看起来应该没有问题,并且可以想象,您可能已经发现了编译器错误。OTOH,您的测试代码可能没有这么简单;如果你试试这个,它可能会起作用。所以,不要去声称编译器错误。假设您的代码中存在错误,直到所有其他方法都失败为止。尝试不同的编译器(对相同的代码获得第二意见)。