主题中讨论的其他器件:MSPMATHLIB
您好!
我将 atan2函数的输出与 QMath _Qatan2和 IQMath _IQatan2函数进行比较、并在 IQatan2中看到45、135、225和315度的异常、但_Qatan2是可以的(请参阅下图)。 下面显示了我使用的例程。 我已经尝试了几个不同的值、分别针对 global_Q (6至8)和 global_IQ (22至24)。
我的代码是否有问题(可能)或_IQatan2是否有问题(不太可能)?
谢谢、
Larry
void Test_Fixed_Point_Math ()
{
uint16_t i;
双倍 X;
双 Y;
双 θ;
_q _q_X;
_q _q_Y;
_q _q_theta;
_iq _iq_X;
_iq _iq_Y;
_iq _iq_theta;
const double Pi = 3.1415926536;
对于(I = 0;I < 361;I++)
{
X = cos ((float) i*PI/180);
y = sin ((float) i*PI/180);
Theta = atan2 (Y、X)* 180 / Pi;
如果(θ< 0)θ=θ+ 360;
printf ("%d "、i);
printf ("%f %f %f "、X、Y、theta);
_q_X =_Q (X);
_q_Y =_Q (Y);
_q_theta =_Qatan2 (_q_Y、_q_X);
Theta =_QTOF (_q_theta)* 180 / Pi;
如果(θ< 0)θ=θ+ 360;
printf ("%d %d %d %d %f "、_q_X、_q_Y、_q_theta、theta);
printf ("%f %f "、_QTOF (_q_X)、_QTOF (_q_Y));
_IQ_X =_IQ (X);
_IQ_Y =_IQ (Y);
_iq_theta =_IQatan2 (_IQ_Y、_IQ_X);
Theta =_IQtoF (_IQ_theta)* 180 / Pi;
如果(θ< 0)θ=θ+ 360;
printf ("%ld %ld %ld %f "、_IQ_X、_IQ_Y、_IQ_theta、theta);
printf ("%f %f "、_IQtoF (_IQ_X)、_IQtoF (_IQ_Y));
printf ("\n");
}
}
