프로그래밍 언어/C++

[C/C++] 부동소수점의 비교연산 안되는 이유 및 오차범위 해결하기

ShovelingLife 2024. 5. 3. 11:00
int i = 0;
double d = 0.f;

while (i++ < 100)
	d += 0.01;

 

사실 C++에선 다 자르고 출력하기 때문에 파악하기가 쉽지 않다 

 

아래와 같이 작성해주면 쉽게 파악 할 수가 있다 따라서

if (d == 1.0) 를 해주면 false가 나오는 이유다

int main()
{
	int i = 0;
	double d = 0.f;

	while (i++ < 100)
		d += 0.01;
        
	printf("%.16f", d);
}

 

이녀석만큼 빼주면 된다

int main()
{
	int i = 0;
	double d = 0.f;

	while (i++ < 100)
		d += 0.01;

	if (fabsf(d - 1.0) <= FLT_EPSILON)
		cout << "same";
}