【求助算法】如何通过定点计算的方案实现把小数存入到整数数组中
要求:通过定点运算实现把数值的小数部分存入到short类型的后9位,整数部分存入到前7位中 问题点数:100、回复次数:12Top
1 楼jack_wq(风尘往事具忘去,心地无私天地宽)回复于 2006-03-10 08:51:11 得分 0
工作中遇到的问题,请大侠指导一下,谢谢。Top
2 楼goodluckyxl(被人遗忘的狗)回复于 2006-03-10 09:17:24 得分 15
//简单在回复里敲下 表达我的思路
float a = 123.4567;
short res = 0, temp = 0;
res = (short)a;
res << = 9;
if( (temp=(a-(short)a)*1000) > 511 )
{
res |= temp/10;
}
else
res | = temp;Top
3 楼Squall1009(钰枫)(找工作ing)回复于 2006-03-10 09:27:17 得分 2
假如存放不下怎么办,还是不存在这种问题?
假如小数部分太长的话,光/10似乎还是不够Top
4 楼goodluckyxl(被人遗忘的狗)回复于 2006-03-10 09:34:16 得分 0
假如存放不下怎么办,还是不存在这种问题?
假如小数部分太长的话,光/10似乎还是不够
------------
temp的赋值保证在1000以内如果大于9位存储的最大值511后
会以两位数存储
如果在9位存储范围内则按三位存储
呵呵 楼上没有细看我的意思啊Top
5 楼jack_wq(风尘往事具忘去,心地无私天地宽)回复于 2006-03-10 09:50:36 得分 0
能不能给讲一下究竟什么是定点计算?我对这个概念不是很清楚?Top
6 楼jack_wq(风尘往事具忘去,心地无私天地宽)回复于 2006-03-10 09:51:56 得分 0
而且,我不明白为什么定点运算的效率要比浮点运算的效率高?究竟能差多少呢?Top
7 楼jack_wq(风尘往事具忘去,心地无私天地宽)回复于 2006-03-10 11:11:22 得分 0
顶,哪位大侠再给指导一下?Top
8 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-10 12:10:24 得分 15
定点运算类似于整数运算,因此它的效率要比浮点的高的多
但是定点运算又不完全等同于于整数运算,它主要涉及到的问题是小数点对齐的问题
处理加减法容易,不涉及到小数点对齐的情况
乘除法就麻烦了,比如对于除法,假定浮点数a=1.0, b=2.0
计算 c = a/b的时候,
如果把a和b转换成为纯粹的整数来计算,那么结果就是0了, (1<<9)/(2<<9)
但是结果显然应该是0.5<<9才对
具体的如何计算,应该是按照浮点运算规则来进行
偷懒的办法是在乘法的时候,先把short int变成int,成后再移位会去
除的时候,把被除数放大到int类型,除完后再移位回去
Top
9 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-10 12:16:01 得分 10
如果问题是对于一个已经存在的浮点数,来实现它到short类型格式的转换的话,方法又不同了
如果是在pc计算机当中,最好的办法是应该参照ieee754的格式来自动做
直接从浮点数的内存表达结构当中,提取它
blog.csdn.net/happy__888上面有这个浮点数格式的描述
按照格式的描述,提取出来浮点数的指数部分,以及小数部分后,
把指数+9,直接就确定了定点数的格式了
直接把小数部分按照指数定位后直接copy其中的16位到short int当中去就是了Top
10 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-11 11:26:19 得分 50
需要了解一些 相关的知识 ...
2.1 数据与文字的表示方法
2.1.1 数据格式
在选择计算机的数的表示方式时,应当全面考虑以下几个因素:
l 要表示的数的类型(小数、整数、实数和复数):决定表示方式
l 可能遇到的数值范围:确定存储、处理能力
l 数值精确度:处理能力相关
l 数据存储和处理所需要的硬件代价:造价高低
两种常用格式:
l 定点格式:定点格式容许的数值范围有限,但要求的处理硬件比较简单;
l 浮点格式:容许的数值范围很大,但要求的处理硬件比较复杂。
1) 定点数表示法
定点指小数点的位置固定,为了处理方便,一般分为定点纯整数和纯小数。
2) 浮点数表示法
由于所需表示的数值取值范围相差十分悬殊,给存储和计算带来诸多不便,因此出现了浮点运算法。
浮点表示法,即小数点的位置是浮动的。其思想来源于科学计数法。
IEEE754的浮点数(比较特殊)
浮点数的规格化:主要解决同一浮点数表示形式的不唯一性问题。规定 ,否则尾数要进行左移或右移。
机器零的概念:尾数为0或是阶码值小于所能表示的最小数。
3) 十进制数串的表示方法
由于人们对十进制比较熟悉,因此在计算机中要增加对十进制运算的支持。
两种方式:
l 将十进制数变为二进制数运算,输出时再由二进制变为十进制。
l 直接的十进制运算
直接运算的表示方法:
l 字符串形式:用于非数值计算领域
l 压缩的十进制数串:分为定长和不定长两种。需要相应的十进制运算器和指令支持。
4) 自定义数据表示
标志符数据表示、描述符数据表示
区别:
l 标志符与每个数据相连,二者合起来存放在一个存储单元,而描述符要和数据分开存放;
l 描述符表示中,先访问描述符,后访问数据,至少增加一次访存;
l 描述符是程序的一部分,而不是数据的一部分。
2.1.2 数的机器码表示
真值(书写用)、机器码(机器内部使用)的概念
1) 原码:比较自然的表示法,最高位表示符号,0为正,1为负。优点:简单易懂。缺点:加减法运算复杂。
2) 补码:加减法运算方便,减法可以转换为加法。
定点小数的补码,公式2.9
定点整数的补码,公式2.10
3) 反码:为计算补码方便而引入
计算公式,小数公式2.11,整数公式2.12
由反码求补码:符号位置1,各位取反,末位加1。
4) 移码:用于阶码的表示,两个移码容易比较大小,便于对阶。
定义:公式2.14。即将数值向X轴正方向平移2n
2.1.3 字符与字符串的表示方式
ASCII码
2.1.4 汉字的表示方式
1) 输入码:用于汉字输入
2) 内码:用于汉字的存储
3) 字模码:用于汉字的显示
2.1.5 校验码
奇、偶校验码
2.2 定点加法、减法运算
2.2.1 补码加法
加法公式:公式2.17
证明:P31
2.2.2 补码减法
加法公式:公式2.18
证明:P32
2.2.3 溢出概念与检测方法
溢出概念:上溢、下溢
检测方法:双符号位、单符号位
2.2.4 基本的二进制加法/减法器
进位处理方式:串行进位(行波进位)、并行进位
二进制加法/减法器图2.2,
2.2.5 十进制加法器
十进制加法/减法器图2.3
2.3 定点乘法运算
2.3.1 原码并行乘法
二进制乘法公式:公式2。26
人工乘法过程与二进制乘法
乘法器分类:串行、并行。由于串行乘法速度太慢,已被淘汰。
不带符号的阵列乘法器图2.5
不带符号的阵列乘法器执行时间分析
带符号的阵列乘法器原理:
首先取补→不带符号乘法→结果取补
取补器电路图,图2.6。方法:从右向左找到第一个“1”,这个“1”向右,包括本身保持不变,向左都取反。
取补器电路执行时间分析
2.3.2 补码并行乘法
补码与真值的转换公式,公式2.29、2.30。推导过程。
一般化的加法器:有负权输入的,即可以做减法的。
直接补码阵列除法器:节省了取补时间,大大的加快了乘法的速度。结构图见图2.8。
2.4 定点除法运算
2.4.1 原码除法算法原理
二进制除法公式:P45公式
余数处理的两种方法:
恢复余数法:运算步骤不确定,控制复杂,不适合计算机运算。
加减交替法:不恢复余数,运算步骤确定,适合计算机操作。
2.4.2 并行除法器
CAS的结构,图2.9(a),并行除法器结构图2.9(b)。
并行除法器执行时间分析
2.5 定点运算器的组成
2.5.1 逻辑运算
逻辑数概念:不带符号的二进制数。
四种逻辑运算:逻辑非、逻辑加、逻辑乘、逻辑异
2.5.2 多功能算术/逻辑运算单元(ALU)
并行进位,行波进位加/减法器存在的两个问题:
l 运算时间长
l 行波进位加/减法器只能完成加法和减法,而不能完成逻辑操作
图2.11说明:
控制端M用来控制作算术运算还是逻辑运算,两种运算的区别在于是否对进位进行处理。M=0时,对进位无影响,为算术运算;M=1时,进位被封锁,为逻辑运算。
正逻辑中,“1”用高电平表示,“0”用低电平表示,而负逻辑刚好相反。
正逻辑与负逻辑的关系为,正逻辑的“与”到负逻辑中变为“或”,即+·互换。
表2.5的正负逻辑之间的转换可用上述规则实现。
先行进位的实现:公式2.38
2.5.3 内部总线
总线分类:内部总线、外部总线(系统总线)、通信总线。
总线又可分为单向总线和双向总线。
带锁存器的总线可实现总线的复用。
2.5.4 定点运算器的基本结构
运算器包括ALU、阵列乘除器件、寄存器、多路开关、三态缓冲器、数据总线等逻辑部件。运算器的设计,主要是围绕着ALU和寄存器同数据总线之间如何传送操作数和运算结果而进行的。
运算器的三种结构形式:
l 单总线结构的运算器:这种结构的主要缺点是操作进度较慢,但控制电路比较简单。
l 双总线结构的运算器
l 三总线结构的运算器:三总线结构的运算器的特点是操作时间快
2.6 浮点运算方法和浮点运算器
2.6.1 浮点加法、减法运算
浮点加减法的规则,见公式2.39
运算步骤:0操作数检查→对阶→尾数加/减→规格化、舍入
注意:对阶时,小阶向大阶看齐,否则会丢失高有效位。规格化时,左规、右规是指尾数移动方向。
舍入处理的方法
2.6.2 浮点乘、除法运算
浮点乘、除法规则,公式2.40、公式2.41
运算步骤:0操作数检查→阶码加/减→尾数乘/除→规格化、舍入
移码的加减运算规律,公式2.42、公式2.43
2.6.3 浮点运算流水线
为了实现流水,首先必须把输入的任务分割成一系列的子任务,使各子任务能在流水线的各个阶段并发的执行。
对于流水线方式,某一个任务的总体运算时间并没有缩短,而是系统的整体运算时间缩短了。
流水线分类:
l 线性流水线:不带反馈线
l 非线性流水线:带反馈线
加速比的定义,公式2.47
Top
11 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-11 11:27:59 得分 3
恩,
楼上的直接提取内存的方式还是值得考虑的 ~
很直接 ~Top
12 楼wangmuqq88(挥着翅膀的尼姑)回复于 2006-03-12 00:42:15 得分 5
欢迎加群20641933,欢迎大家共同交流.提高!(不怕不会,就怕不学.)Top




