안녕하세요. 천리안 프로그래머포럼 C++Builder 담당자 임펠리테리입니다.
그냥 참고삼아 써보는거니까.. 그냥 참고삼아 보세요.. ^^
실수의 경우 그런 현상은 일반적인 것으로 알고 있습니다. 처음으로 씨를 공부할때
그러한 정확하지 않은 값(?)이 나오는 것 땜에 황당해했던 기억이 나네요.
코드에서 5.82라고 쓰면, 프로그래머는 이게 십진수로 5.82 값이 들어간다고 생각하
기 쉽지만, 사실 컴파일러는 이걸 이진수로 바꾸어서 처리하는게 당연하기 땜에
이 십진수-> 이진수 변환 과정에서 얼마간의 오차가 생기는 거 같더군요.
만약 5.8200001717 와 같이 아주 조그만 오차가 생기는 것을 줄이시려면..
5.8200000000과 같이 계속 0울 지정해줘도 오차는 생길거구...
정확한 값을 얻고 싶으시다면, 아무래도.. 이런 방법을 쓰시는 건
어떨까 싶네요. 그러니까.. 잔머린데... ^^;;;
값(5.8200001717이 들어있겠죠)에다 100을 곱한 후 정수로 변환하고, 다시 실수로
변환해서 100을 나누어주면 되겠네요. 한가지 문제점이 있는데.. 보여주신 경우는
+ 오차값이 생겼지만, 실제로 하다보면 - 값이 생길 수도 있을겁니다.
그러니까, 어느정도의 값(얼마나 해줄 건지는 경험으로 알아낼 수밖에 없죠)을
더 더해주어야 할겁니다. 만약 오차가 0.0001 이하가 확실하다면, 이만큼을 항상
더해준다든지... 넘 잔머리였나... ^^;;;;
독립문에서 임펠리테리였습니다.
(cbuilder, cbuilder@thrunet.com)
|