博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数值计算小问题
阅读量:4630 次
发布时间:2019-06-09

本文共 909 字,大约阅读时间需要 3 分钟。

数值范围转换

243=0xF3 是在寄存器显示的值实际上这是一个负值

那么真实的整数值是 0xF3-256 = 243-256=-13

算法定点化

1=======================Q(16,13)   表示数值的位数是16bit,低13bit是属于小数例子:除以25,经过Q(16,15)之后的值是0x51F计算:0.04*2^15 = 1310.72 取整后=1311=0x51F2=======================Q(16,16)*Q(16,15) 后,小数点数15乘以小数点数16的结果是31位小数点需要右移15bit,才能成为Q(16,16)的定点化3======================12用3bit表示,12=3*4=3*2^24 舍入  ==================四舍五入或向下向上取整:四舍五入取整:round朝零取整:fix进1取整:ceil向下取整:floor

有符号数扩展

INT16 wReal = 0xe96c;INT16 wImag = 0xfae2;UINT32 dTemp;dTemp = (wReal<<16) + wImag;  = (0xe96c << 16) + 0xfae2  = 0xe96c0000 + 0xfffffae2  = 0x1e96dfae2  = 0xe96dfae2由于wImag是有符号数,扩展成32bit就变成了0xfffffae2,导致相加以后出问题了。

移位先后造成比特误差精度问题

假设 x1=3,x2=2.那么(x1>>1)*x2 = 1*2 = 2(x1*x2)>>1 = 6>>1 =3移位放在最后做,精度会高一些

饱和问题

Q(16,14) 与 Q(16,13)相乘结果是Q(32,27)Q(32,27)右移1bit是Q(32,26)右移1bit,去掉最右1bit。Q(32,27)变成Q(31,26)。Q(31,26)高位补1bit,变成Q(32,26),结果是一样的。也可以不补这1bit

 

转载于:https://www.cnblogs.com/McKean/p/6084843.html

你可能感兴趣的文章
linxu passwd 给linux用户设置密码 命令
查看>>
mongodb的shell命令
查看>>
Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...
查看>>
Android UI体验之全屏沉浸式透明状态栏效果
查看>>
STM32普通定时器(TIM2-7)的时钟源
查看>>
单相计量芯片RN8209D使用经验分享(转)
查看>>
SD卡的控制方法(指令集和控制时序)
查看>>
zabbix4.0构建实录
查看>>
javascript保留字
查看>>
assert
查看>>
openstack安装在虚拟机上重启之后无法启动问题
查看>>
Bulk_Collect_Performance 比较
查看>>
类于对象
查看>>
灵活性是原则性基础上的灵活
查看>>
python 添加进度条
查看>>
恢复Opera11.50地址栏的下拉列表按钮
查看>>
EBS上用过的一些接口表整理信息
查看>>
ldconfig
查看>>
操作系统简介
查看>>
查看Linux系统中某目录的大小
查看>>