float 값을 비교할 때 예기치 않은 동작이 발생합니다. 부동 소수점 문제를 반올림 할 수 있지만이 숫자는 매우 구체적입니다.float 값을 비교할 때 예기치 않은 동작이 발생합니다.
#include <stdio.h>
int main()
{
float alpha = 0.0f;
int finish = 0;
while (finish == 0)
{
alpha += 0.05f;
if (alpha > 1.0f)
{
printf("%f", alpha); // Expected result: 1.05f, actual result: 1.0f
finish = 1;
}
}
return 0;
}
실제로는 alpha = 1.0f 일 때 조건이 입력됩니다. 그 행동을 이해할 수 없다. ...
나는 윈도우 10 (32 비트 및 64 비트에서 테스트 됨), 인텔 i5 프로세서에서 MinGW (GCC 5.3.0)로 컴파일 중이다.
'printf ("%. 7f \ n", alpha);'와 같이 유효 숫자가''alpha ''인 경우 다음과 같이 즉시 문제를 볼 수 있습니다 : http://ideone.com/zwQW7e . –
0.05f의 상수가 정확히 0.05를 나타내는 무한 비트 스트림보다 약간 작거나 약간 큰지 알아야합니다. 아마, 그것은 약간 더 클 것입니다. –
이것 (내가 내 대답을 짓기 위해 사용했던 것)을 확인해보십시오. http : //www.exploringbinary.com/floating-point-converter/ – Bathsheba