[C] 씹어 먹는 C 언어 - <10. C 언어에서의 형 변환 >

Kim Dongil·2022년 10월 17일
0

C

목록 보기
14/28

1. 임의의 실수에서 소수점 이하 두자리수만 추출하여 정수형 변수에 대입하라. 예를들어 사용자로부터 입력받은 실수 f 가 12.3456이라면 34만 추출한다. 이때 반올림은 고려하지 않아도 상관없다. f 가 달러 단위의 화폐 액수라고할 때 센트 단위만 추출해내는 경우라고 생각하면 된다. 다음 ???? 자리에 적합한 연산식을 작성하는 문제이다.


이 문제의 핵심은 음수이거나 소수점 이하의 자리수가 없는 경우까지 잘 고려하여 항상 잘 동작하는 코드를 만드는것이다.

int main()
{
	int i;
	float f;

	printf("실수 입력 : ");
	scanf_s("%f", &f);

	i = (f - (int)f) * 100;

	if (i < 0)
	{
		i *= -1;
	}

	printf("i=%d\n", i);

	return 0;
}

대부분의 실수들은 정상 작동하는데 가끔 값이 이상하게 나오는 실수들이 있다.



원래라면 위에서부터 차례대로 30, 40, 70 이 나와야하는데 저런식으로 한번씩 틀리게 나온다.

코드가 틀린건 아닌것 같고 궁금해서 찾아보니
컴퓨터는 실수를 가지고 수행하는 모든 연산에는 언제나 작은 오차가 존재하고 이것은 모든 프로그래밍 언어에서 발생하는 기본적인 문제라고 한다.

씹어 먹는 C 언어 - <10. 연예인 캐스팅(?) (C 언어에서의 형 변환)>
부동 소수점 오차.
[CS] 부동 소수점 오차

0개의 댓글