Direct3D를 사용하는 도중에 커다란 문제가 생기기 시작했습니다.;
부동소숫점을 사용하는 것들이 정상적으로 동작하지 않는 것이 아니겠습니까?..
가장 첫번째로 눈에 들어온 것은 TDateTimePicker의 오동작 문제였습니다..
이러한 문제가 벌어진 것이지요..
게다가 연산을 하는데 또다른 문제가 발생하기 시작했습니다.
double a = 4122008.1234;
이렇게 넣어주는데 까지는 전혀 문제가 없지만..
a += 0.1234;
요 문장이 들어가고 난 이후에는..
a의 값이 4122008.2468 이 되는 것이 아니라 4122008.25 가 되어버리더군요...
소숫점 하나하나가 중요한 연산이 되고 있는 상황에서 이 정도의 오차율에 기겁을 하고 말았습니다. -0-;;
이 문제를 해결하기 위해 a += 0.1234; 라는 코드를 한줄 한줄 넣어 찾아본 결과 CreateDevice 를 한 뒤부터 저렇게 동작을 하고 말더군요!
( DX8, DX81, DX9 모두 똑같은 문제점이 있었습니다. ;ㅁ; )
어디가 문제인지 인식하였으므로.. 이제 남은 방법은 해결하는 것 뿐이죠..
구글링을 해보니 비슷한 문제를 갖고있던 분들이 계셨나봅니다. +ㅅ+
D3DCREATE_FPU_PRESERVE 요것에 대해 나오더군요!
CreateDevice 함수의 인자중 하나인 BehaviorFlags 에 넣어주면 된다는 것이지요!
ex)
CreateDevice( D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,G_HANDLE,
D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE,
&d3dpp,&g_pd3dDevice) ) )
휘유~ 이제 부동소숫점 연산을 무사히 할 수 있겠군요 -0-;;
'공부합시다! > Tip n Tech' 카테고리의 다른 글
| 블로그 줄간격 유지하기. (3) | 2007/09/21 |
|---|---|
| localtime() 함수에 대해... (2) | 2006/10/26 |
| Direct3D와 Floating point 연산 문제. (0) | 2006/10/26 |
| [Rewrite Module] 여러개의 도메인을 하나로.. (12) | 2006/10/04 |
| winnt.h 에서의 오류. (1) | 2006/08/01 |
| 메인 도메인 주소로 이동하기. (0) | 2006/06/23 |