我正在尝试在C中对双精度数据类型进行算术位移位,我想知道这是不是正确的方法:
注意: firdelay在main中声明为双firdelay8
void function1(double firdelay[][12]) {
int * shiftptr;
// Cast address of element of 2D matrix (type double) to integer pointer
*shiftptr = (int *) (&firdelay[0][5]);
// Dereference integer pointer and shift right by 12 bits
*shiftptr >>= 12;
}发布于 2011-08-11 02:24:05
按位移位浮点数据类型不会给出您想要的结果。
在Simulink中,移位算术块仅对整数数据类型进行位移位。如果输入浮点类型,它会将输入信号除以2^N,其中N是掩码对话框中指定的移位位数。
编辑:
由于您不能执行任何浮点数学运算,因此您的选择如下:
我推荐选项2,它比选项1简单得多
发布于 2011-08-11 02:17:44
对浮点数据类型进行位移位(重新解释为整型)会让你胡言乱语(看看二进制表示here的图表就知道原因了)。
如果你想乘以2的幂/除2的幂,那么你应该显式地这样做。
发布于 2011-08-11 02:30:20
根据措辞不佳且非常不明确的documentation,Simulink中的“位移位”似乎接受两个浮点值的参数,并具有将浮点值乘以两个参数的效果。
您可以使用ldexp(double_number, bits_to_pseudo_shift)来获得此行为。在<math.h>中可以找到函数ldexp。
https://stackoverflow.com/questions/7015663
复制相似问题