大家好!
本人是DSP的初学者,目前在项目中遇到一个8次函数的计算问题,是一个1元最高8次(内涵全部0~8次)的累加运算,里面的常量据很大,超过32位,并且确定计算结果肯定在32位之内,结果不会溢出,floa肯定t够用。
目前采用了两种方式实现,第一种是调用pow(a,b)函数,完成8次方到0次方的累加,是双精度的肯定够用,最后赋值保存成float,计算的结果正常。
第二种方式是直接根据公式直接计算,只一个公式多次相乘并相加的型式,中间没有数据类型的转换,最后赋值保存成float,计算的结果正常且与方式一结果相同。
目前有两个问题,第一个问题是,方式二中的一些常数貌似已经超过了32位float的范围,也没有类型转换但是结果是正确的,没有溢出的现象。
第二个问题是我用反正器试运行计算了这两种方式的运行周期,同样是完成5组运算,第一种方式反而很慢,需要100000个运行周期都快到1ms了,可是第二种只需要40多个运行周期速度快的惊人!
不知道什么原因,感觉既然DSP的math里提供了pow(a,b)函数,自然是很有优势的,可是为什么速度反而很慢?
相比以上两种方式的运行时间当然越快越好,但是第一种方式的时间也是能接受的,目前不知道调用pow(a,b)函数的优势在哪里?还有就是第二种直接计算的风险是什么?会不会出现常数在运算中的溢出导致错误?
期待大家能给我留言帮助我,谢谢!