浮点型数据的双精度表示方法_第1页
浮点型数据的双精度表示方法_第2页
浮点型数据的双精度表示方法_第3页
浮点型数据的双精度表示方法_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浮点型数据的双精度表示方法

0浮点数值的生成ea754是执行浮点数的最广泛使用的标准,使用各种cpu和浮点运算器。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormalnumber)、一些特殊数值(无穷与非数值(NaN))以及这些数值的“浮点数运算子”。它规定了4种表示浮点数值的方式:单精确度(32位元)、双精确度(64位元)、延伸单精确度(43位元以上,很少使用)与延伸双精确度(79位元以上,通常以80位元实做)。其中只有32位元模式有强制要求,其他都是选择性的。BorlandC++Builder是最知名的可视化C++应用程序开发工具之一,它易学易用的操作界面和功能强大的应用组件,可以让程序员快速建立各种应用程序。BorlandC++Builder不仅继承了Delphi使用简便、功能强大、效率高等特点,而且它还结合C++语言所有的优点。C++Builder可以说是至今最容易上手的Windows开发工具。目前可视化编程中应用IEEE处理整型数据到浮点型数据运算的研究还很少,本文侧重于实现将8位十六进制的数据转换成浮点型数据,应用于解析Modbus中RTU格式通信所获得的浮点型数据,并编写了上位机可视化软件来显示。1转换算法的介绍1.1加快各时间点的添加浮点型数据保存的格式如表1所示。其中:S表示符号位;“1”表示负数;“0”表示正数;E代表偏移127的幂数,二进制阶码=(EEEEEEEE)-127;M代表24位的尾数,存放在23个位中,只存储23位,最高位固定为1,此方法用最少的位数实现了较高的有效位数,提高了精度“0”是一个特定值,幂数是0,尾数也是0。1.2六进制转换为浮点数IEEE754标准中的浮点保存值不是一个直接的格式,要把十六进制转换为一个浮点数,必须按照表1中所示的方式进行分开。这里又分为三种情况:(1)E部分不全为0也不全为1的情况;(2)E部分全部为0的情况;(3)E部分全部为1的情况。1.2.1实际样品的编码以0xC1420000为例,先把0xC1420000写成表1中所示形式,如下:由上可以看出,此数是一个负数,二进制阶码=(10000010)-127=3,也就是实际的幂数。尾数是后面的二进制数10000100000000000000000,这是已存储的23位二进制,还有一位没有被存储的最高位,固定为1,所以整个尾数即:110000100000000000000000则根据实际的幂数,浮点型数为:1.2.2x400bcoaf的实际应用这是一种非规格化的数据,此时k=1-(27-1)=-126,完整的位数部分为0MMMMMMMMM-MMMMMMMMMMMMMM。以0x800BCAEF为例,先把0x800BCAEF写成表1中所示形式,如下:由上可以看出,此数是一个负数,二进制阶码k=1-127=-126,也就是实际的幂数。尾数是后面的二进制数00010111100101011101111,这是已存储的23位二进制,还有一位没有被存储的最高位,固定为1,所以整个尾数即:100010111100101011101111,则根据实际的幂数,浮点型数为:1.2.3定义数的分析如果E部分全为1,则系数k=28-1=127,此时又分两大类情况:(1)尾数是0的情况,这类情况下的数要么是正无穷大要么是负无穷大;(2)尾数不全为0的情况,根据IEEE754标准,这类情况是表示的一个没有被定义的数,也就是不存在这样的数。结合以上三部分的分析可得出计算步骤如下:(1)先判断十六进制数的最高位是否为1:若为1则是负数,若为0则是正数;(2)把该数右移23位并和0xFF相与,得到二进制数(EEEEEEEE);(3)把步骤(2)得到的二进制数(EEEEEEEE)减127得到二进制的最高位幂数(设为k);(4)把原数和0x7FFFFF相与得到不带最高位的尾数(MMMMMMMMMMMMMMMMMMMMMMM),然后再把得到的尾数的最高数置“1”,即得到完整的尾数:(1MMMMMMMMMMMMMMMMMMMMMMM);(5)在步骤(4)中得到的尾数的24位二进制数乘以2k并相加即是所求浮点数2布局表面核心构件的属性打开BorlandC++Builder6.0,在空白的Form1上放置5个Edit控件,2个Label控件,1个按钮,布局Form上的控件并修改属性,如图1所示。软件工作流程如图2所示。3计算结果对比把前面举例的数据0xC1420000进行计算,计算结果如图3所示。可由图3看出计算结果和第1.2.1中计算结果一致。其次再把第1.2.2部分中所举的数据用软件进行计算,结果如图3所示。可由图4看出,计算结果与第1.2.2部分中分析得出的结果一致。最后把第1.2.3部分中描述的情况用软件实现,结果如图5所示。图5显示的是E部分全部为1且尾数部分不全为0的情况的计算结果。图6上半部分显示的是E部分全部为“1”且尾数部分全为“0”的一种计算。由于最高位为“1”,所以计算结果是负无穷大;下半部分是另外一种计算,由于最高位是“0”,所以计算结果是正无穷大。另外本文又仿真了一组Modbus协议中表示温度的十六进制数据,转换成浮点型数据,仿真结果如图7所示。4实验结果及分析为了验证仿真结果的正确性,本文编写了从浮点型数据转换成十六进制数据的计算软件,将之前的数据进行一一验证,验证结果如图8、图9所示。为确保本文中计算软件的无误计算,本文在-1000~1000之间随机取数进行了大量的数据转换计算实验,并随机记录了10组数据,如表2所示。由表2中数据仿真结果及其验证可以看出本文中所编写的转换算法的精度是非常高的,能够满足高精度测量仪器的数据转换使用,而且可以看出小数点后保留的位数越多得出的结果越接近原始的数据。5基于浮点型数据的转换编程利用BorlandC++Builder6.0编程开发环境完成的十六进制整型数据转换为浮点型数据的软件实现了从整型数据到浮点型数据的转换计算,经过二次开发该软件可被用于Modbus通信协议中高精度浮点型数据的传输打包、解析和显示。另外,本文也完成了从浮点型数据到十

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论