Output limit Exceed

adg8770 Reply 3 years 47 weeks ago
왜 float로하면 OLE가뜨고 double로 하면 안뜨는지 궁금합니다. 직접 결과를 보면 확실히 float의 경우 다섯번째자리가 같아져도 무한루프가 돌긴 하던데 그 이유가 궁금합니다
withcs2 Reply 3 years 47 weeks ago
#include<stdio.h> int main() { float left=309.15366, right=309.153687, avg=(left+right)/2.0; printf("%f %f %f\n",left,right,avg); } 위의 코드를 실행시켜보면 left는 309.153656으로 나오고, avg 309.153687로 나오는 등 의도하지 않은 값들이 나오는 것을 볼 수 있습니다. 컴퓨터는 2진법을 사용하기 때문에 10진수로 된 소수를 완벽하게 표현하는 것은 사실 불가능합니다. 그 중에서도 float은 소수점 5자리 이하의 계산에는 부적합한 자료형입니다. 때문에 소수점 계산에는 double이나 long double을 사용하는 것이 좋습니다
adg8770 Reply 3 years 47 weeks ago
감사합니다!!