#define PI 3.141592

// -PI<=rad<PIになるよう正規化する
double GetNormalizedRadian1(double rad) {
 while (rad<=-PI) rad+=PI*2;
 while (rad> PI) rad-=PI*2;
 return rad;
}

double GetNormalizedRadian2(double rad) {
 static const double PI2 = PI * 2;
 double i=ceil(rad/PI2);
 return fmod(rad+i*PI2, PI2);
}

上と下では結果が違うんです
GetNormalizedRadian1(-3*PI) ----> -3.141592
GetNormalizedRadian2(-3*PI) ----> 3.141592
上の関数だとループがなんかイヤだったので下の関数にしましたが、
下手に小細工するよりかは上の関数の書き方の方が良いでしょうか