C 프로그래밍 입문/부동소수형 데이터: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
Joshuajh (토론 | 기여)
Joshuajh (토론 | 기여)
138번째 줄:
float 아마 예측한 출력값은 1.0이었겠지만 실제 출력값은 전혀 예측하지 못한 값이 출력되었을 것 이다. 그 이유는 부동소수를 컴퓨터 내부에 표기하기 위해 부동소수의 값을 지수부와 가수부로 나누어 저장하도록 되어있는데, 일반적으로 float 타입은 가수부를 위해 10진수를 기준으로 6자리에서 7자리 정도를 저장할 공간만을 할애하고 나머지는 지수부와 부호를 표시하기 위해 사용된다. 그렇기 때문에 그 한계를 넘어가는 연산을 수행하려고 한 경우 연산결과가 가수부에서 표현 불가능한 값이 되어버리고 만다. 부동소수형의 연산결과가 전혀 예상치 못한 결과를 낳게되는 다른 원인도 있는데, 지수부에 사용될 메모리 공간이 부족한 경우 가수부의 공간 일부를 가져다 쓰는 경우도 있기 때문에 부동소수 연산을 어떻게 구현했느냐에 따라 같은 자리올림 에러에 의한 값이라 해도 다르게 나올 수 있다.
 
실제로 C라는 언어는 정밀한 연산을 위해 만들어진 언어가 아니라 기계 -- 컴퓨터 하드웨어를 가능하면 효율적으로 동작하는 프로그램을 만들기 위해 만들어진 언어이기 때문에 정확한 실수연산을 하고자 한다면 다른 언어 - 예를 들자면 과학기술 계산용으로 만들어진 포트란(Fortran)을 이용해야 정확한 연산 결과를 얻을 수 있다. C에서 포트란이 제공하는 정밀한 실수연산 기능을 사용하고 싶다면 포트란으로 만들어진 함수를 C에서 호출해서 사용하는 방법도 있다. 포트란 함수를 C에서 호출하는 방법을 알고자 하는 사람은 [http://arnholm.org/software/cppf77/cppf77.htm 포트란 함수를 C에서 호출하는 방법을방법]을 참조하기 바란다.
<!- ]혹은 [http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html] -->
</div>