在16位芯片上,设计了一条名为EXPN的指令,求以2为底的指数。
当时,整理指令的时候,没有考虑太多。直到今天,被问道,才仔细思考。根据副总工的讲解,我总结了一下几点:
我们在对一段语音波形信号进行处理存储时,我们是用定点数来表示。比如我们用16bit[-32767,32768]来表示一段波形,这段波形的最大值是1000,最小值是-1000。那么我们用11bit,就足够了。这时我们将数据左移,也就是乘以2的幂次。就是将该数据放大,在进行加减乘除等运算,则保留的精度更多。他提到了有限字长效应,不知道是什么东东?没有来得及查询。
他举了一个例子,在芯片中做运算 (x*y)/2 与 (x/2)*(y/2),有何不同?
(0011H * 0003H)>>1 与 (0011H>>1) * (0003H>>1)
(0011H * 0003H)>>1 —> 0CH 保留的精度多
(0011H >>1)*(0003H>>1)—> 08H 损失的精度多
所以,我们在保证不溢出的情况下,先放大,在做运算是对于精度的保持是有利的。
比如,0011H/3 与
1100H(将0011H左移了8位后)/3 >> 8,肯定后者精度保留的多。
EXPN这条指令,主要是做参照来用。如果两个数做运算,谁放大到最大精度需要以为的数少,则我们放大多少倍将由它来决定。