글 수 3,386
예전에 책에서 읽은적이 있는 내용을 바탕으로 이글을 씁니다..
2진수 어렵죠... 그 어려운 2진수의 나열(기계어) 대신에 우리는 C라는 프로그래밍 언어를 통해서 쉽게 무엇인가를 창조해 내는 일을 하고 있습니다.
하지만 내부적인 작동은 2진수임에 틀립이 없습니다. 그렇다면 우리는 어느정도 프로그래밍에 2진수의 원리를 적용해야 하는것이 아닐까 생각을 해봅니다.
#include <stdio.h>
const float number=0.1;
int main()
{
float result=0;
int i;
for(i=0; i<1000; i++)
{
result+=number;
}
printf("%fn",result);
}
이 코드의 실행 결과는 어떨까요?? 단순히 0.1 을 1000번 더하는 것에
불과한 코드 입니다.
저희가 원하는 값인 100이 나올수 있을까요??
값자기 무슨 뚱딴지 같은 이야기 이냐구요?? 이 코드를 실행해 보면 알수 있습니다.
2진수는 0.1을 정확게 표현 할수 없습니다.
한번 해보세요.. 부동소수점 표현에서 0.1은 무한 소수가 될겁니다.
그렇기에 float 든 double든 정확한 0.1의 표현은 있을수 없습니다.
위와 같은 코드를 작성하지 않아야 저희의 실력이 올라가는 것이 겠죠??
잠시 생각이나서 끄적 거렸습니다..
2진수 어렵죠... 그 어려운 2진수의 나열(기계어) 대신에 우리는 C라는 프로그래밍 언어를 통해서 쉽게 무엇인가를 창조해 내는 일을 하고 있습니다.
하지만 내부적인 작동은 2진수임에 틀립이 없습니다. 그렇다면 우리는 어느정도 프로그래밍에 2진수의 원리를 적용해야 하는것이 아닐까 생각을 해봅니다.
#include <stdio.h>
const float number=0.1;
int main()
{
float result=0;
int i;
for(i=0; i<1000; i++)
{
result+=number;
}
printf("%fn",result);
}
이 코드의 실행 결과는 어떨까요?? 단순히 0.1 을 1000번 더하는 것에
불과한 코드 입니다.
저희가 원하는 값인 100이 나올수 있을까요??
값자기 무슨 뚱딴지 같은 이야기 이냐구요?? 이 코드를 실행해 보면 알수 있습니다.
2진수는 0.1을 정확게 표현 할수 없습니다.
한번 해보세요.. 부동소수점 표현에서 0.1은 무한 소수가 될겁니다.
그렇기에 float 든 double든 정확한 0.1의 표현은 있을수 없습니다.
위와 같은 코드를 작성하지 않아야 저희의 실력이 올라가는 것이 겠죠??
잠시 생각이나서 끄적 거렸습니다..
본 게시물은 2011.01.04일 복구된 게시물 입니다. 첨부파일 및 이미지파일은 복구 되지 않았습니다. [자세한 내용 보기]




http://purmi.org/harvest/IEEEfloat_%EB%B2%88%EC%97%AD