DM642下浮点转定点操作
来源:互联网 发布:mysql 统计字符串长度 编辑:程序博客网 时间:2024/05/01 22:59
http://blog.csdn.net/henhen2002/article/details/4640542
float x = 0.23;
float y = 0.14;
float z;
int Qx;
int Qy;
int Qz;
//数据转化部分
Qx = (int)(x*1048576); //转化成Q20格式,DM642支持Q31
Qy = (int)(y*1048576);
//数据处理部分
Qz = ((long)Qx*Qy)>>20;
//数据转回部分
z = (float)Qz/1048576;
printf("%f/n", z);
输出:0.032199 实际结果:0.0322 精度损失还是比较小的
单独处理一个这样的数,Q格式的优势是没有得到体现的,但往往处理过程复杂很多,有大量的循环等,这样就达到了节省运算量的目的。
这里再用加法进行样例说明:
浮点到定点Xq=X*2^q
定点到浮点X=Xq/2^q
设x=0.5 y=3.1 则浮点运算的结果为z=x+y=0.5+3.1=3.6
Qx=15//为什么x=0.5要定标为Q15呢?因为Q15能表示的范围为-1<=X<=1-1/32768,精度为1/32768,目的是为了提高精度
Qy=13//原因同上
Qz=13//原因同上
x=0.5*2^15=16384//Q15定标
y=3.1*2^13≈25395//Q13定标
temp=25395<<2=101580//为什么要左移两位呢?把y扩大到相同的标尺上进行运行,说白了就是统一单位进行运算。呵呵
temp=x+temp=16384+101580=117964
z=(int)(117964L>>2)=29491//结果用Q13表示
因为z的Q为13,所以定点值z=29491即为z=29491/2^13≈3.59998≈3.6//精度高
同样是上面的运算,我用Q4定标计算
Qx=4 //Q4表示的范围-2048<=X<=2048-1/16,精度为1/16
Qy=4
Qz=4
x=0.5*2^4=8
y=3.1*16≈50
temp=8+50=58
z=58/16=3.625≈3.6//精度度低
- DM642下浮点转定点操作
- DM642下浮点转定点操作
- DM642对SDRAM的操作
- MIPS处理器下浮点指令的处理方法
- ARM处理器Linux下浮点运算单元运用
- DM642
- 4.定点转
- 浮点转定点运算
- 浮点转定点运算
- 浮点转定点运算
- 浮点转定点运算
- 浮点转定点运算
- 浮点转定点
- 今天主要练习定点转.
- 浮点数-转-定点数
- PowerPC上浮点和定点有可能并行做
- opencv中不稳定点集转换到稳定点集
- 鼠标下浮动的文字和时钟(转帖修改)
- ReportStudio入门教程(九十三) - 查询1引用查询2的方法(允许向量乘积)
- Akka 编程(20):容错处理(一)
- 浮云
- 线程的操作
- 利用属性名称配置,自动转换成java bean对象的set、get方法的方法
- DM642下浮点转定点操作
- 设软链接和修改目录的写权限
- MySql增加字段、删除字段、修改字段名称、修改字段类型
- zip4j -- Java处理zip压缩文件
- ConcurrentHashMap
- iOS项目名称的更改以及国际化名称(一)
- test
- jdk service provider interface
- java中关键字volatile的作用