CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

【求助算法】如何通过定点计算的方案实现把小数存入到整数数组中

楼主jack_wq(风尘往事具忘去,心地无私天地宽)2006-03-10 08:50:30 在 C/C++ / C语言 提问

要求:通过定点运算实现把数值的小数部分存入到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

相关问题

  • 数组算法??
  • 求出一个整数组成的集合的所有子集的算法
  • new一个小数组.
  • 求快速查找有序数组(整数)里与给定数最接近值的算法
  • 用分治(递归)算法,求n个整数的数组中的第二大的数
  • 从10000个正整数树用最快的算法找出100个最小数,要快
  • 正整数拆分算法
  • 数组正规化算法 求教
  • 数组拆分的算法问题
  • 求数组移位的算法

关键词

  • 小数
  • 整数
  • 实现
  • 部分存入
  • short
  • res

得分解答快速导航

  • 帖主:jack_wq
  • goodluckyxl
  • Squall1009
  • happy__888
  • happy__888
  • jixingzhong
  • jixingzhong
  • wangmuqq88

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo