우선 fmod라는 함수를 모르시는 분들을 위해 간단한 설명을 드리자면

fmod 는 C++ 연산에서 % 연산을 실수로 하고 싶을때 사용하는 함수라고 보면 됩니다.
기본적으로 10 % 3 이라는 연산은 에러가 나지 않지만 10.0f % 3.0f 라는 연산은 빌드 에러가 납니다.
%는 정수형으로만 연산이 되는 연산자이기 때문인데, 실수를 % 연산을 하고 싶다면 fmod를 사용하게 됩니다.

다음 예제를 한번 참고해보겠습니다.

#define D3DX_PI    ((FLOAT)  3.141592654f) // d3dx9math.h

float gap = D3DX_PI * 1.5; // 4.7123890
float border = D3DX_PI / 8; // 0.39269909

int quot = (int) (gap / border);
float mod = ::fmod(gap, border);

간단하게 270도에 해당되는 gap을 22.5도에 해당되는 border로 나눈 다음 나머지는 fmod 로 구한다. 라는 간단한 연산입니다.
기본적으로 그냥 산술적인 연산은 몫은 12, 나머지는 0이 나와야 정상이지만 결과는 예상과 빗나간 다음과 같습니다.

quot : 12
mod : 0.39269897

원인은 gap / border 의 결과 때문인데, 실제 gap / border 의 연산은 11.999999696.... 이 되어 버립니다. 한없이 12에 가까운 11이 나오게 되는것이죠.
이것을 (int)로 변환하면 12가 나오게 됩니다.
하지만 mod는 몫을 정상적인 연산결과인 11.99999... 를 가지고 연산을 합니다. 그래서 mod는 예측과 다른 값을 계산하게 되는 것이죠.

프로그래밍도중 위치 방향을 잡는데 가끔 이상한 결과가 나와서 추적을 해봤는데 fmod에 대한 조심할 점을 발견하게 되었네요. 사용하실때 참고하셨으면 합니다.