C: How to wrap a float to the interval [-pi, pi)

前端 未结 15 948
死守一世寂寞
死守一世寂寞 2020-11-28 21:47

I\'m looking for some nice C code that will accomplish effectively:

while (deltaPhase >= M_PI) deltaPhase -= M_TWOPI;
while (deltaPhase < -M_PI) deltaP         


        
15条回答
  •  情书的邮戳
    2020-11-28 22:31

    In C99:

    float unwindRadians( float radians )
    {
       const bool radiansNeedUnwinding = radians < -M_PI || M_PI <= radians;
    
       if ( radiansNeedUnwinding )
       {
          if ( signbit( radians ) )
          {
             radians = -fmodf( -radians + M_PI, 2.f * M_PI ) + M_PI;
          }
          else
          {
             radians = fmodf( radians + M_PI, 2.f * M_PI ) - M_PI;
          }
       }
    
       return radians;
    }
    

提交回复
热议问题