数值计算小问题

数值范围转换

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=0x51F

2=======================
Q(16,16)*Q(16,15) 后,小数点数15乘以小数点数16的结果是31位小数点
需要右移15bit,才能成为Q(16,16)的定点化

3======================
12用3bit表示,12=3*4=3*2^2

4 舍入  ==================
四舍五入或向下向上取整:
四舍五入取整: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
时间: 2024-07-30 03:04:52

数值计算小问题的相关文章

shell-变量的数值计算

变量的数值计算觉的有如下命令 (()).let.expr.bc.$[] 下面看看数值计算的运算符 (())此法很常用且效率高,用于执行整数型的计算,不支持浮点型. 如图 [[email protected] ~]# ((a=1+2**3-4%3)) [[email protected] ~]# echo $a 8 [[email protected] ~]# b=$((1+2**3-4%3)) [[email protected] ~]# echo $b 8 [[email protected]

近来的java小总结(2.1):类的知识的查漏补缺

首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一些知

Linux江湖17:适合数值计算的语言需要具备什么样的特色

2015年1月,我继续徜徉在数值计算的海洋中.这段时间里,我抽空看了Python科学计算和数值分析方面的书,也仔细研读了Octave的用户手册,甚至连古老的Fortran.新兴的R语言我都去逐一了解.对于数值计算的库,我了解了一下Boost的uBLAS,以前也用过OpenCV,当然,了解最多的还是Python中的NumPy.SciPy和pandas. 前几篇随笔搞了不少工具论,所以今天我就专门来论一论编程语言.我的这个Linux江湖系列是一会儿方法论一会儿工具论,每过一段时间也谈谈编程语言.今天

近来的java小总结(2.2):类的知识的查漏补缺

1 首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一

复化梯形求积分——用Python进行数值计算

用程序来求积分的方法有很多,这篇文章主要是有关牛顿-科特斯公式. 学过插值算法的同学最容易想到的就是用插值函数代替被积分函数来求积分,但实际上在大部分场景下这是行不通的. 插值函数一般是一个不超过n次的多项式,如果用插值函数来求积分的话,就会引进高次多项式求积分的问题.这样会将原来的求积分问题带到另一个求积分问题:如何求n次多项式的积分,而且当次数变高时,会出现龙悲歌现象,误差反而可能会增大,并且高次的插值求积公式有可能会变得不稳定:详细原因不赘述. 牛顿-科特斯公式解决这一问题的办法是将大的插

文成小盆友python-num15 - JavaScript基础

一.JavaScript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能. 二.组成部分 ECMAScript,描述了该语言的语法和基本对象 文档对象模型(DOM),描述处理网页内容的方法和接口. 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口. 三. Jav

自家用的java小总结(2.4):类的知识的查漏补缺(内部类)

1 2      首先,这是一篇自己用的文章,不对读者承担任何责任,所以,要带着批判的眼光来看下面的文章   1 发现了,得加上输出结果,怕自己出错,~~   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算

本文讲解shell编程中变量的数值计算. 1.常见的算术运算符: 提示: 此处对于我自己来说++.--比较难理解,之前一看到脚本中有这些符号,就看不懂了,所以在此举例说明一下: [[email protected] ~]# a=10                  ==>定义变量a[[email protected] ~]# echo $((a++)) ==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值, 此前定义的变量a为10,所以此处的值为10.10[[email 

使用Intel编译器获得一致的浮点数值计算结果

大多数十进制的浮点数, 用二进制表示时不是完全一致的; 与此同时, 大多数与浮点数值相关的计算结果, 存在着固有的不确定性. 通常, 编写浮点计算应用软件希望达到如下的目标:  - 准确性:     意味着该产品产生的计算结果,应当"接近"于实际计算的结果; 评判的标准是误差值, 有时候也采用最后几位("units in the last place", ulp)  - 可复制性:    意味着该产品始终产生一致的结果, 无论运行的先后, 采用不同的编译选项, 使用