3 实验结果及讨论
前一节中详细介绍了高精度算法的具体流程,可以发现其与经典算法相比,不同之处在于进行移位相减之前把除数和被除数进行了不同位数的左移,保证进行移位相减的除数的数据位最高位是l,即14位为1,而被除数的第13位为1。正是这个左移使结果的精度得到了提高。
在所引用的经典算法中,当1被除数l<l除数I时所得的商为小数,而当|被除数|≥|除数|时所得的商为整数。实际上商为小数时其Q值为15,商为整数时其Q值为O。根据后面给出的算法,结果的Q值为(14+m一n)。当|被除数|<|除数|时,可以得到n≤m,则商的Q值≥14;当|被除数|≥|除数|时,可以得到n≥m,则商的Q值≤14。从对比中可以发现,当|被除数|≥|除数|时结果的Q值提高了(14+m—n)。
利用高精度算法在TMS320C5416中计算上面的4组数据,所得结果如表2所列。
上面的实验说明,该算法使计算结果的精度有了很大的提高。取表中第三组数据进行详细分析,y=479、x=240,利用经典算法结果为整数1。利用改进后的算法,得到的结果有两部分:quot值=3FDDH,Q值=13。由这两部分可以算得精确的商值1.995 727 539 062 5,而479/240=1.995 83,计算结果与实际值之间的误差为O.000105 794 270 83。当Q值=13时,定点数据表示形式允许的误差为2-13=O.000 122 070 312 5,可见计算结果误差在允许的误差范围之内,也就是说计算结果满足所推导出的精度的范围。对比前后两种算法,可以发现这里的计算结果精度由原来的1提高到了2-13。
通过分析可知,该算法使计算结果在精度上有了非常大的提高,但是在效率上则有所降低。如表3所列:
表3中的时钟周期指的是DSP的机器时钟周期。由表3可以发现高精度算法对于不同的数据所需的周期数是不一样的,而且算法中计算被除数和除数的高位无效位数占用了大部分的周期数。
经典算法在效率上比高精度算法高,主要是因为在高精度算法中高位无效位数的计算效率过低。用C5416计算|被除数|和|除数|的高位无效位数,效率低是由于在C5416中没有现成的指令来探测数据中哪一位为最高有效位。表3给出的时钟周期数是在笔者的程序中所得到的结果,由于时间匆忙和优化方面能力的局限性,所以并不能保证在程序优化方面做得很好,所以在C5416中对该部分程序再进行更好的优化以减少执行的时间是很可能的。
在TI公司C6000系列的定点DSP中,有专门的指令LMBD来快速得到累加器中从符号位开始无效0位的个数,只需几个周期就能完成C5416里高位无效位数的计算,所以在C6000中完成整个算法的效率与经典算法相比肯定能够提高。并且在C6000系列中对不同的数据进行计算所需的时钟周期数是一样的,因此在C6O0O系列定点DSP中该算法有着更好的实用性。
结 语
本文介绍了高精度除法在定点DSP中的实现,通过与经典除法算法的对比,显示了其高精度的优点。定点TMS320C5416实验表明该算法使商的精度得到了很大的提高,但是在计算的效率上有待进一步提高。