このコード:
#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、あなたのテスト コードはおそらくこれほど単純ではありません。これを試してみると、おそらくうまくいくでしょう。したがって、まだコンパイラのバグを主張しないでください。他のすべてが失敗するまで、コードに障害があると想定します。別のコンパイラを試してください (同じコードについてセカンド オピニオンを取得してください)。