Game Dev/Article

x64와 x86에서의 float 연산

AKer 2014. 10. 30. 00:38
반응형

간단하게...


  1. QA에서만 재현되는 버그가 있었음
  2. Debug/Release 모드 차이인 줄 알았었는데 아님
  3. 확인 결과 x64(=개발환경), x86(=배포환경) 차이
  4. 문제가 된 부분의 로직은 페이지를 계산하는 것
    • int page = std::ceil(input / (float)10);
  5. 다음과 같은 시도 중 하나를 통해서 해결 가능
    1. ceil을 사용하지 않는 로직으로 변경
    2. #pragma optimize("", off)로 로직을 감쌈 (이유는 모르겠음)
    3. 로직 전후로 Log를 찍음 (이유는 모르겠음)
    4. (float)10을 (double)10으로 변경
  6. 하지만 문제는 4-1이었음
    • http://stackoverflow.com/questions/22710272/difference-in-floating-point-arithmetics-between-x86-and-x64
    • x86에서는 x87 Unit을 사용하고, x64에서는 x64 Unit을 이용해서 계산하도록 코드가 생성됨

지금 정확하게 발견된 직접적인 원인은 프로젝트 설정에서 "Floating Point Model"이 "/fp:fast"로 설정되어서였다. 이로써 5-2와 5-3이 왜 이렇게 되었는지도 명확해졌다.


반응형

'Game Dev > Article' 카테고리의 다른 글

CppCon2014 : C++ in Huge AAA Games  (0) 2016.10.08
C4265 Warning을 켜자!  (0) 2016.09.22
함수 객체의 장점  (0) 2014.07.24
VS2013에 TortiseGitBlame 연결하기  (0) 2014.07.09