Language

부동소수점 연산 실수

Lunatics_ 2022. 7. 25. 23:29

float 연산의 소수점 아래 6자리 이상은 신뢰할 수 없다는것 까진 알고있었다.

그런데 코딩중에 값에 소수가 없는데 계산값이 예상과 다른경우가 발생했다.

부동소수점의 정수도 일정 범위 이상은 값은 신뢰 할 수 없는것을 배제한 탓에 문제가 발생한것 정리용으로 글을 남긴다.

왼쪽은 C# 오른쪽은 C++

targetValue는 int 범위 이내의 자연수이고 거기에 10에서 100까지 더했을때 float는 1677717부터 정수계산과 다른 결과가 발생한다.

왼쪽은 C# 오른쪽은 C++

같은 코드의 float만 double로 변경한 경우 32비트 정수 범위 내에서는 문제가 없었다.