이 코드 :
#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;
}
맥 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, 당신의 테스트 코드는 아마 이것만큼 간단하지 않을 것이다; 이 방법을 사용하면 효과가있을 것입니다. 그래서, 아직 컴파일러 버그를 주장하지 마십시오. 다른 모든 것이 실패 할 때까지 코드에 오류가 있다고 가정합니다. 다른 컴파일러를 사용해보십시오 (동일한 코드에 대한 두 번째 의견을 얻으십시오).
코드를 더 게시하십시오. 특히 abs_yaw에 대해 실제로 어떤 값을 사용하고 float, double 등 어떤 데이터 유형 bs [Line]인지 확인하십시오. –
가능성 1 : 로컬 변수에는 실제로 21.0f가 포함되지 않습니다. 가능성 2 :'abs_yaw'는 변수가 아니라 부작용이있는 표현식입니다. 가능성 3 : ** abs_yaw가 0.025 바로 위에 있다는 것을 ** 알지 못함 ** 실제로는 더 큽니다. –
@Daniel 피셔 사실, 더 많은 코드를 사용하면 더 효과적으로 도움을받을 수 있습니다. –