9 Cordic::Cordic(
const uint32_t& aPhiScale ,
const uint32_t& aMagnitudeBits ,
const uint32_t& aSteps ) : mPhiScale( aPhiScale ) , mMagnitudeScale( 1 << aMagnitudeBits ) , mMagnitudeBits( aMagnitudeBits ) , mSteps( aSteps ) , mPi( 3.1415926535897932384626433832795 )
15 for( uint32_t lStep( 0 ); lStep!=
mSteps ; ++lStep ){
16 lValue /=
sqrt( 1.0 +
pow( 4.0 , -
double(lStep) ) );
26 return double( aPhi ) / double(
mPhiScale );
41 return uint32_t( round(
mPhiScale * 0.5 * aRadians /
mPi ) );
48 switch( ((aY>=0)?0x0:0
x2) | ((aX>=0)?0x0:0
x1) ){
71 for( uint32_t lStep( 0 ); lStep!=
mSteps ; ++lStep ){
72 if ( (aY < 0) == lSign ){
78 int32_t lX(aX), lY(aY);
80 aX = lX - (lY >> lStep);
81 aY = lY + (lX >> lStep);
83 aX = lX + (lY >> lStep);
84 aY = lY - (lX >> lStep);
int32_t IntegerizeMagnitude(const double &aMagnitude)
double NormalizeMagnitude(const uint32_t &aMagnitude)
void operator()(int32_t aX, int32_t aY, int32_t &aPhi, uint32_t &aMagnitude)
uint32_t tower(const double &aRadians)
Cordic(const uint32_t &aPhiScale, const uint32_t &aMagnitudeBits, const uint32_t &aSteps)
uint64_t mMagnitudeRenormalization
std::vector< uint32_t > mRotations
double NormalizePhi(const uint32_t &aPhi)
Power< A, B >::type pow(const A &a, const B &b)