TI中文支持网
TI专业的中文技术问题搜集分享网站

为什么IQNmath的精度这么低(经过测试验证),与理论精度的差距这么大呢?

您好!

     我的目的是测试28335的IQN的存储精度和三角函数精度,因为我们工业控制需要精确到小数点后第8~9位。

     测试程序为:C:\ti\controlSUITE\libs\math\IQmath\v160\examples\C\projects 中的28335_IQsampleC。

       (1)芯片:28335.
       (2)软件版本:CCS6.0.0

       (3)测试程序位:C:\ti\controlSUITE\libs\math\IQmath\v160\examples\C\projects 中的28335_IQsampleC。

第一步,在28335_IQsampleC中修改精度:

          #define GLOBAL_Q    28

         long GlobalQ = GLOBAL_Q;

第二步,定义变量和常量:

         #define PI              3.14159265358979

          _iq tempX, tempY, tempM;

第三步,main函数中设置检测函数:

     tempX=_IQ(PI);
     tempY=_IQsin(_IQ(PI)/6);
     tempM=_IQsin(tempX/4);

第四步,设置断点,用Q-Value(28)格式进行查看。计算结果如下:

    tempX=3.141 592 741(理论精确值应该是tempX=PI=3.141 592 653 589 79,所以误差为 0.000 000 887 9);

    tempY=0.500 000 011 2(理论精确值应该是tempY=0.5,所以误差为 0.000 000 0112);

    tempM=0.707 106 795 2.(理论精确值应该是tempM=0.707 106 781 186 547,所以误差为 0.000 000 014);

第五步,与IQmath手册中的精度进行比较。

     手册中指出,IQ28的取值范围为:-8~8,误差为0.000 000 004。 与计算结果相差很大。

第六步,得出结论:手册值和实际测试值之间误差极大。

问题:

     (a)这是怎么回事呢?IQN的精度为什么这么低,与普通的float一样的精度呢?

     (b)如何解决呢?

谢谢!

rookiecalf:

应该是使用方法错误, #define GLOBAL_Q    28要保证在引用IQmath的头文件之前。或者如果是全局只有一个Q值的话,直接在头文件中修改Q值。

您好!

     我的目的是测试28335的IQN的存储精度和三角函数精度,因为我们工业控制需要精确到小数点后第8~9位。

     测试程序为:C:\ti\controlSUITE\libs\math\IQmath\v160\examples\C\projects 中的28335_IQsampleC。

       (1)芯片:28335.
       (2)软件版本:CCS6.0.0

       (3)测试程序位:C:\ti\controlSUITE\libs\math\IQmath\v160\examples\C\projects 中的28335_IQsampleC。

第一步,在28335_IQsampleC中修改精度:

          #define GLOBAL_Q    28

         long GlobalQ = GLOBAL_Q;

第二步,定义变量和常量:

         #define PI              3.14159265358979

          _iq tempX, tempY, tempM;

第三步,main函数中设置检测函数:

     tempX=_IQ(PI);
     tempY=_IQsin(_IQ(PI)/6);
     tempM=_IQsin(tempX/4);

第四步,设置断点,用Q-Value(28)格式进行查看。计算结果如下:

    tempX=3.141 592 741(理论精确值应该是tempX=PI=3.141 592 653 589 79,所以误差为 0.000 000 887 9);

    tempY=0.500 000 011 2(理论精确值应该是tempY=0.5,所以误差为 0.000 000 0112);

    tempM=0.707 106 795 2.(理论精确值应该是tempM=0.707 106 781 186 547,所以误差为 0.000 000 014);

第五步,与IQmath手册中的精度进行比较。

     手册中指出,IQ28的取值范围为:-8~8,误差为0.000 000 004。 与计算结果相差很大。

第六步,得出结论:手册值和实际测试值之间误差极大。

问题:

     (a)这是怎么回事呢?IQN的精度为什么这么低,与普通的float一样的精度呢?

     (b)如何解决呢?

谢谢!

dong Zhang8:

回复 rookiecalf:

          我只是在TI的fpu例程上面加了几个测试语句。其它的都没改变。也即:#define GLOBAL_Q    28 是在引用IQmath的头文件之前的。所以不是这个原因造成的。要是不信的话,您可以在自己的电脑上面试试看,就会发现这个问题。

赞(0)
未经允许不得转载:TI中文支持网 » 为什么IQNmath的精度这么低(经过测试验证),与理论精度的差距这么大呢?
分享到: 更多 (0)