浮点转定点方法总结
- 格式:doc
- 大小:259.13 KB
- 文档页数:19
DSP中浮点转定点运算--举例及编程中的⼼得5.举例及编程中的⼼得5.1举例 “第3章 DSP芯⽚的定点运算.doc”这篇⽂章中给了⼀个很简单有能说明问题的例⼦,不想动⼤脑了,直接引⽤过来如下。
这是⼀个对语⾳信号(0.3kHz~3.4kHz)进⾏低通滤波的C语⾔程序,低通滤波的截⽌频率为800Hz,滤波器采⽤19点的有限冲击响应FIR滤波。
语⾳信号的采样频率为8kHz,每个语⾳样值按16位整型数存放在insp.dat⽂件中。
例3.7 语⾳信号800Hz 19点FIR低通滤波C语⾔浮点程序复制代码代码如下:#include <stdio.h>const int length = 180 /*语⾳帧长为180点=22.5ms@8kHz采样*/void filter(int xin[ ],int xout[ ],int n,float h[ ]); /*滤波⼦程序说明*//*19点滤波器系数*/static float h[19]={0.01218354,-0.009012882,-0.02881839,-0.04743239,-0.04584568,-0.008692503,0.06446265,0.1544655,0.2289794,0.257883,0.2289794,0.1544655,0.06446265,-0.008692503,-0.04584568,-0.04743239,-0.02881839,-0.009012882,0.01218354};static int x1[length+20];/*低通滤波浮点⼦程序*/void filter(int xin[ ],int xout[ ],int n,float h[ ]){int i,j;float sum;for(i=0;i<length;i++) x1[n+i-1]=xin[i];for (i=0;i<length;i++){sum=0.0;for(j=0;j<n;j++) sum+=h[j]*x1[i-j+n-1];xout[i]=(int)sum;}for(i=0;i<(n-1);i++) x1[n-i-2]=xin[length-1-i];}/*主程序*/void main( ){FILE *fp1,*fp2;int frame,indata[length],outdata[length];fp1=fopen(insp.dat,"rb"); /*输⼊语⾳⽂件*/fp2=fopen(outsp.dat,"wb"); /*滤波后语⾳⽂件*/frame=0;while(feof(fp1)==0){frame++;printf("frame=%d/n",frame);for(i=0;i<length;i++) indata[i]=getw(fp1); /*取⼀帧语⾳数据*/filter(indata,outdata,19,h); /*调⽤低通滤波⼦程序*/for(i=0;i<length;i++) putw(outdata[i],fp2); /*将滤波后的样值写⼊⽂件*/}fcloseall( ); /*关闭⽂件*/return(0);}例3.8 语⾳信号800Hz 19点FIR低通滤波C语⾔定点程序复制代码代码如下:#include <stdio.h>const int length=180;void filter(int xin[ ],int xout[ ],int n,int h[ ]);static int h[19]={399,-296,-945,-1555,-1503,-285,2112,5061,7503,8450,7503,5061,2112,-285,-1503,-1555,-945,-296,399}; /*Q15*/static int x1[length+20];/*低通滤波定点⼦程序*/void filter(int xin[ ],int xout[ ],int n,int h[ ]){int i,j;long sum;for(i=0;i<length;i++) x1[n+i-1]=xin[i];for (i=0;i<length;i++){sum=0;for(j=0;j<n;j++) sum+=(long)h[j]*x1[i-j+n-1];xout[i]=sum>>15;}for(i=0;i<(n-1);i++) x1[n-i-2]=xin[length-i-1];}主程序与浮点的完全⼀样。
浮点转定点方法总结CII Technologies, Inc. 浮点转定点方法总结浮点转定点方法总结—孔德琦1CII Technologies, Inc. 目录目录定点运算方法...................................................................... ............................................................. 3 1.1 数的定标 ..................................................................... (3)1.2 C语言:从浮点到定点 ..................................................................... . (4)1.2.1 加法...................................................................... .. (4)1.2.2乘法...................................................................... (6)1.2.3除法...................................................................... (7)1.2.4 三角函数运算 ..................................................................... .. (8)1.2.5 开方运算 ..................................................................... .................................................... 9 1.3 附录 ..................................................................... .. (10)1.3.1 附录1:定点函数库 ..................................................................... . (10)1.3.2附录2:正弦和余弦表 ..................................................................... . (19)2CII Technologies, Inc. 浮点转定点方法总结定点运算方法1.1 数的定标对某些处理器而言,参与数值运算的数就是16位的整型数。
浮点转定点方法总结—孔德琦目录定点运算方法................................................ 错误!未定义书签。
数的定标 ............................................... 错误!未定义书签。
C语言:从浮点到定点 ................................. 错误!未定义书签。
加法.................................................... 错误!未定义书签。
乘法..................................................... 错误!未定义书签。
除法..................................................... 错误!未定义书签。
三角函数运算............................................ 错误!未定义书签。
开方运算................................................ 错误!未定义书签。
附录...................................................... 错误!未定义书签。
附录1:定点函数库...................................... 错误!未定义书签。
附录2:正弦和余弦表..................................... 错误!未定义书签。
定点运算方法数的定标对某些处理器而言,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不一定都是整数。
那么,如何处理小数的呢?应该说,处理器本身无能为力。
那么是不是就不能处理各种小数呢?当然不是。
这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。
浮点运算转定点运算与afreez⼀起学习DSP中浮点转定点运算⼀:浮点与定点概述1.1相关定义说明定点数:通俗的说,⼩数点固定的数。
以⼈民币为例,我们⽇常经常说到的如123.45¥,789.34¥等等,默认的情况下,⼩数点后⾯有两位⼩数,即⾓,分。
如果⼩数点在最⾼有效位的前⾯,则这样的数称为纯⼩数的定点数,如0.12345,0.78934等。
如果⼩数点在最低有效位的后⾯,则这样的数称为纯整数的定点数,如12345,78934等。
浮点数:⼀般说来,⼩数点不固定的数。
⽐较容易的理解⽅式是,考虑以下我们⽇常见到的科学记数法,拿我们上⾯的数字举例,如123.45,可以写成以下⼏种形式:12.345x1011.2345 x1020.12345 x103xi……为了表⽰⼀个数,⼩数点的位置可以变化,即⼩数点不固定。
1.2定点数与浮点数的对⽐为了简单的把问题描述清楚,这⾥都是⼗进制数字举例,详细的分析,⼤家可以在后⾯的⽂章中看到。
(1)表⽰的精度与范围不同例如,我们⽤4个⼗进制数来表达⼀个数字。
对于定点数(这⾥以定点整数为例),我们表⽰区间[0000,9999]中的任何⼀个数字,但是如果我们要想表⽰类似1234.3的数值就⽆能为⼒了,因为此时的表⽰精度为1/100=1;如果采⽤浮点数来表⽰(以归整的科学记数法,即⼩数点前有⼀位有效位,为例),则可以表⽰[0.000,9.999]之间的任何⼀个数字,表⽰的精度为1/103=0.001,精度⽐上⼀种⽅式提⾼了很多,但是表⽰的范围却⼩了很多。
也就是说,⼀般的,定点数表⽰的精度较低,但表⽰的数值范围较⼤;⽽浮点数恰恰相反。
(2)计算机中运算的效率不同⼀般说来,定点数的运算在计算机中实现起来⽐较简单,效率较⾼;⽽浮点数的运算在计算机中实现起来⽐较复杂,效率相对较低。
(3)硬件依赖性⼀般说来,只要有硬件提供运算部件,就会提供定点数运算的⽀持(不知道说的确切否,没有听说过不⽀持定点数运算的硬件),但不⼀定⽀持浮点数运算,如有的很多嵌⼊式开发板就不提供浮点运算的⽀持。
模型代码生成时浮点到定点的转换转浮点转换为定点是嵌入式软件开发中的一个重要步骤,这项工作非常繁琐,需要大量人力并且容易产生错误。
用浮点数学设计的算法表示理想的算法行为,经常必须转换为定点数学,才能用于更加经济的、只支持整数的大规模生产的硬件。
转换后,位精确的定点仿真使您在将该设计嵌入到硬件之前就能够研究定点数据类型的行为。
本文使用具有容错能力的燃料系统模型作为示例,描述了将浮点模型定点化并生成产品级代码的工具和工作流程。
涵盖的主题包括:*准备模型和数据*分析、改进以及优化定点定标*生成优化代码此处描述的方法采用Simulink Fixed Point中的两种工具:Fixed-Point Advisor和Fixed-Point Tool。
准备模型和数据进行转换容错燃料系统模型包含三个主要组件:ECU控制器、发动机气动力学设备以及几个传感器。
在本文中,我们着重讲述ECU控制器。
Fixed-Point Advisor是一个交互式工具,旨在加速模型准备过程图1:通过Fixed-Point Advisor准备模型。
使用Fixed-Point Advisor,我们可完成下列步骤(在下面会详细讨论):*替换不支持的模块。
*设置信号记录并创建初始参考数据。
*指定目标硬件特性。
*准备数据类型和定标。
*执行初始数据类型和定标。
*检查模型对于产品级代码部署的适宜性。
替换不支持的模块Fixed Point Advisor会检查模型里是否有不支持定点数据类型的模块。
连续的模块将被离散的模块替换。
Simulink模块支持的数据类型列表表明大多数模块支持定点数据类型。
与成百个嵌入式MATLAB函数(包括嵌入式算法设计中通常使用的函数)一样,Stateflow完全支持定点数据类型。
设置信号记录并创建初始参考数据在仿真过程中,会记录诸如输入和输出信号等感兴趣的信号,以用于与浮点模型的等值比较以及代码生成。
我们可以记录所有信号,或者从模型子系统层级中选择信号,包括未命名的信号。
matlab 定点数浮点数转换
Matlab中,定点数和浮点数的表示方式不同,需要进行相应的转换。
定点数是以固定的位数来表示数值,而浮点数则是根据 IEEE 754 标准来表示,可以表示更广泛的数值范围和精度。
定点数转换为浮点数,可以使用 fi 对象的 double 方法,将定点数转换为双精度浮点数。
例如:
a = fi(3, 1, 8); % 定点数,1 位整数,8 位小数
b = double(a); % 转换为双精度浮点数
浮点数转换为定点数,则需要先确定定点数的位数和精度,然后使用 fi 对象进行转换。
例如:
a = 3.14; % 浮点数
b = fi(a, 1, 8); % 转换为定点数,1 位整数,8 位小数
需要注意的是,在进行定点数和浮点数转换时,可能会存在精度损失的问题。
因此,在实际应用中,需要根据具体情况进行精度控制和误差分析。
- 1 -。
定点数与浮点数转小数点的表示为了节省内存,计算机中数值型数据的小数点的位置是隐含的,且小数点的位置既可以是固定的,也可以是变化的。
定点数与浮点数如果小数点的位置事先已有约定,不再改变,此类数称为"定点数"。
相比之下,如果小数点的位置可变,则称为"浮点数"。
⑴定点数。
常用的定点数有两种表示形式:如果小数点位置约定在最低数值位的后面,则该数只能是定点整数;如果小数点位置约定在最高数值位的前面,则该数只能是定点小数。
例如,假定用两个字节存放一个定点数,则以定点方式表示的十进制整数195为:这里,(-0.6876)10=(-0.10110000000001101…)2,转换为无限循环小数,存储时多余的位被截断。
如果知道一个定点数的小数点位置约定和占用存储空间大小,那么很容易确定其表示数的范围。
⑵浮点数。
浮点数表示法来源于数学中的指数表示形式,如193可以表示为0.193x103或1.93x102等。
一般地,数的指数形式可记作:N=M xRC其中,M称为"尾数",C称为"阶码"。
在存储时,一个浮点数所占用的存储空间被划分为两部分,分别存放尾数和阶码。
尾数部分通常使用定点小数方式,阶码则采用定点整数方式。
尾数的长度影响该数的精度,而阶码则决定该数的表示范围。
同样大小的空间中,可以存放远比定点数取值范围大得多的浮点数,但浮点数的运算规则比定点数更复杂。
1.什么是浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数。
典型的比如相对于浮点数的定点数(Fixed Point Number)。
在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。
货币的表达就可以使用这种方式,比如99.00或者00.99可以用于表达具有四位精度(Precision),小数点后有两位的货币值。
由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。
在定点的DSP或处理器中,实现一个浮点数的运算时一个非常复杂的事情,尤其是非四则运算的函数运算,例如三角函数运算,sin,cos,tan,又比如指数运算,exp,非整数的幂运算等等。
用机器来实现这样复杂的运算,会花费很多的计算指令周期。
在某些程度下,用定点整数去代替浮点运算,会很大程度的节省运算时间,是应用程序达到实时运算的效果。
一DSP定点算数运算1数的定标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。
一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。
显然,字长越长,所能表示的数的范围越大,精度也越高。
如无特别说明,本书均以16位字长为例。
DSP芯片的数以2的补码形式表示。
每个16位数用一个符号位来表示数的正负,0表示数值为正, l则表示数值为负。
其余15位表示数值的大小。
因此,二进制数0010000000000011b=8195二进制数1111111111111100b=-4对DSP芯片而言,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不一定都是整数。
那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。
那么是不是说DSP芯片就不能处理各种小数呢?当然不是。
这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。
这就是数的定标。
通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标有Q表示法和S表示法两种。
表1.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。
从表1.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。
例如,16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示但对于DSP芯片来说,处理方法是完全相同的。
从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。
yolo参数转定点onnx
将YOLO参数转换为定点ONNX格式需要经历以下步骤:
1.导出YOLO模型:将训练好的YOLO模型导出为ONNX格式。
可以使用YOLO 框架提供的导出工具或使用第三方库(如pytorch或tensorflow)来导出模型。
具体的导出方法会根据使用的YOLO版本和框架而有所不同。
2.量化模型:将浮点模型转换为定点模型。
定点表示使用整数表示权重和激活值,以降低模型的存储和计算成本。
可以使用量化工具,如TensorRT或ONNX Runtime等,将浮点模型转换为定点模型。
3.设置定点参数:在转换为定点模型后,需要设置模型的定点参数,包括比例因子、位宽和偏移量等。
这些参数用于将浮点值映射到定点表示,并在推理过程中保持正确的精度。
4.重新编译和优化:对定点模型进行重新编译和优化,以确保模型在定点硬件上的有效性和性能。
这可能涉及到模型的量化、量化感知训练、动态固定点缩放等技术。
5.测试和调优:在转换为定点ONNX模型后,需要对模型进行测试和调优,以确保模型在定点推理过程中的准确性和性能。
可以使用测试集进行性能评估和验证。
需要注意的是,YOLO模型的参数转换为定点ONNX格式是一个复杂的过程,需要深入了解YOLO模型和定点推理技术。
具体的实现方法和工具选择会根据的需求和环境而有所不同。
建议参考YOLO和ONNX的官方文档,以获取更详细的指导和资料。
CII Technologies, Inc. 浮点转定点方法总结浮点转定点方法总结—孔德琦CII Technologies, Inc. 目录目录定点运算方法 (3)1.1数的定标 (3)1.2 C语言:从浮点到定点 (4)1.2.1 加法 (4)1.2.2乘法 (6)1.2.3除法 (7)1.2.4 三角函数运算 (8)1.2.5 开方运算 (9)1.3附录 (10)1.3.1 附录1:定点函数库 (10)1.3.2附录2:正弦和余弦表 (19)定点运算方法1.1 数的定标对某些处理器而言,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不一定都是整数。
那么,如何处理小数的呢?应该说,处理器本身无能为力。
那么是不是就不能处理各种小数呢?当然不是。
这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。
这就是数的定标。
通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标用Q表示法。
表1.1列出了一个16位数的16种Q表示能表示的十进制数值范围和近似的精度。
Q表示精度(近似) 十进制数表示范围Q15 0.00002 -1≤X≤0.9999695Q14 0.00005 -2≤X≤1.9999390Q13 0.0001 -4≤X≤3.9998779Q12 0.0002 -8≤X≤7.9997559Q11 0.0005 -16≤X≤15.9995117Q10 0.001 -32≤X≤31.9990234Q9 0.002 -64≤X≤63.9980469Q8 0.005 -128≤X≤127.9960938Q7 0.01 -256≤X≤255.9921875Q6 0.02 -512≤X≤511.9804375Q5 0.04 -1024≤X≤1023.96875Q4 0.08 -2048≤X≤2047.9375Q3 0.1 -4096≤X≤4095.875Q2 0.25 -8192≤X≤8191.75Q1 0.5 -16384≤X≤16383.5Q0 1 -32768≤X≤32767表1.1 Q表示、S表示及数值范围从表1.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。
例如:16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。
Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。
例如,Q0的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768 = 0.00003051。
因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相应地减小。
在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。
浮点数与定点数的转换关系可表示为:浮点数(x)转换为定点数(x q ):Qq x 2x (int)*=定点数(q x )转换为浮点数(x):Qq x -*=2)float (x例如,浮点数 x=0.5,定标 Q =15,则定点数q x =⎣⎦16384327685.0=⨯,式中⎣⎦表示下取整。
反之,一个用 Q =15 表示的定点数16384,其浮点数为16384×2-15=16384/32768=0.5。
1.2 c 语言:从浮点到定点下面所描述的几种基本运算是浮点到定点转换中经常遇到的,从中可以体会到一些基本的技巧和方法。
1.2.1 加法设浮点加法运算的表达式为:float x,y,z;z=x+y;将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标值一样。
若两者不一样,则在做加法/减法运算前先进行小数点的调整。
为保证运算精度,需使Q 值小的数调整为与另一个数的Q 值一样大。
此外,在做加法/减法运算时,必须注意结果可能会超过16位表示,即数的动态范围。
如果加法/减法的结果超出16位的表示范围,则必须保留32位结果,以保证运算的精度。
1. 结果不超过16位表示范围设x 的Q 值为Qx ,y 的Q 值为Qy ,且Qx>Qy ,加法/减法结果z 的定标值为Qz ,则z =x+y ⇒yxzQ q Q q Q q y x z ---⋅+⋅=⋅222=xy x xQ Q Q q Q q y x ---⋅⋅+⋅222)(=xy x Q Q Q q q y x --⋅⋅+2]2[)( ⇒)()(2]2[x z y x Q Q Q Q q q q y x z --⋅⋅+=一般情况,我们取x,y 和z 的定标值相同,即Qx = Qy = Qz = Qa 。
所以定点加法可以描述为:short x, y , z ; //Qaz = add (x,y); //Qa函数add ( ) 有防饱和机制,如果可以确信x + y 不会溢出(-2^15 <= z < = 2^15-1),可以直接写为z = x + y .定点减法:short x, y, z ; //Qaz = sub (x,y);//Qa函数sub ( ) 有防饱和机制,如果可以确信x - y 不会溢出(-2^15 <= z < = 2^15-1),可以直接写为z = x - y .2.结果超过16位表示范围设x的Q值为Qx,y的Q值为Qy,且Qx>Qy,加法结果z的定标值为Qz,则定点加法为:int x,y;long temp,z;temp=y<<(Qx-Qy);temp=x+temp;z=temp>>(Qx-Qz),若Qx≥Qzz=temp<<(Qz-Qx),若Qx≤Qz一般情况,我们取x,y和z的定标值相同,即Qx = Qy = Qz = Qa 。
所以定点加法可以描述为:int x, y, z ; //Qaz = L_add (x,y);//Qa函数L_add ( ) 有防饱和机制,如果可以确信x + y 不会溢出(-2^31 <= z < = 2^31-1),可以直接写为z = x + y .定点减法:int x, y, z ; //Qaz = L_sub (x,y);//Qa函数L_sub ( ) 有防饱和机制,如果可以确信x - y 不会溢出(-2^31 <= z < = 2^31-1),可以直接写为z = x - y .3.结果超过32位表示范围这种情况下位数超出了标准c语言的数的表示范围,只能用数组来保存变量。
定点加法可以描述为:#define NN_DIGIT unsigned intNN_DIGIT x [digits], y [digits], z [digits] ;//QaNN_Add (z, x, y, digits) ; //Qa定点减法:NN_DIGIT x [digits], y [digits], z [digits] ; //Qa NN_Sub (z, x, y, digits) ; Qa应注意的是以上32位定点加减法都是无符号数操作。
1.2.2乘法1. 16位乘法设浮点乘法运算的表达式为:float x,y,z; z = xy;假设经过统计后x 的定标值为Qx ,y 的定标值为Qy ,乘积z 的定标值为Qz ,则z = xy ⇒zQ q z -⋅2=)(2y x Q Q q q y x +-⋅⋅ ⇒q z =)(2)(y x z Q Q Q q q y x +-所以定点表示的乘法为:short x; //Qx short y; //Qy int z ; //Qzz = L_mult(x, y) >> (Qx+Qy+1-Qz);上式中x 乘y 的定标本来应该是Qx + Qy, 但为了处理方便,函数L_mult( ) 多乘了一次2,因此要再加1。
函数L_mult ( ) 有防饱和机制,如果可以确信z = x y 不会溢出(-2^31 <= z < = 2^31-1),可以直接写为z = (xy) >>(Qx+Qy -Qz)。
2. 结果超过32位表示范围这种情况下位数超出了标准c 语言的数的表示范围,只能用数组来保存变量。
定点乘法可表示为: #define NN_DIGIT unsigned int NN_DIGIT x [digits]; NN_DIGIT y [digits];NN_DIGIT z [2* digits];NN_Mult (z, x, y , digits);应注意的是以上32位乘法都是无符号数操作,如果需要做有符号数乘法,则需要根据乘数的符号来判断。
例1设x = 18.4,y = 36.8,则浮点运算值为z =18.4×36.8 = 677.12; 设 Qx = 10,Qy = 9,Qz = 5,所以 int x = 18841;//Q10int y = 18841;//Q9z = L_mult(18841, 18841)>>(10+9+1-5) = 354983281L>>14 = 21666;因为z 的定标值为5,故定点 z = 21666即为浮点的 z = 21666/32 = 677.08。
例2设x = 18.4,y = 36.8,则浮点运算值为z =18.4×36.8 = 677.12; #define NN_DIGIT unsigned int 设Qx = 20, Qy = 20, Qy = 20, 所以 NN_DIGIT x = 18.4 * (1<<20); //Q20 NN_DIGIT y = 36.8 * (1<<20); //Q20NN_DIGIT z[2]; //Q20 NN_Mult(z, &x, &y, 1); //Q40 NN_Rshift(z, z, 20, 1); //Q(40-20)1.2.3除法1. 32位除法设浮点除法运算的表达式为:float x,y,z; z = x/y;假设经过统计后被除数x 的定标值为Qx ,除数y 的定标值为Qy ,商z 的定标值为Qz ,则z = x/y ⇒zQ q z -⋅2=yx Q q Q q y x --⋅⋅22 ⇒qQ Q Q q q y x z y x z )(2+-⋅=所以定点表示的除法为:int x,y,z;z = L_shl(x, (Qz -Qx+Qy) )/y; //Qz2. 32位以上的除法这种情况下位数超出了标准c 语言的数的表示范围,只能用数组来保存变量。