一:转换
如:十进制数12.34,多项式表示: 1*10^1 + 2*10^0 + 3*10^(-1) + 4*10^(-2)
化简为二进制表示:
整数部分:除2取余,直到商为0,倒序取余
表达式 商 余
12/2 6 0
6/2 3 0
3/2 1 1
1/2 0 1
结果为 1100
小数部分: 乘2取整,直到小数部分为0或满足精度后(截取),顺序取值
表达式 积 整数部分
0.34*2 0.68 0
0.68*2 1.36 1
0.36*2 0.72 0
0.72*2 1.44 1
0.44*2 0.88 0
0.88*2 1.76 1
0.76*2 1.52 1
0.52*2 1.04 1
0.04*2 0.08 0
0.08*2 0.16 0
0.16*2 0.32 0
0.32*2 0.64 0
0.64*2 1.28 1
0.28*2 0.56 0
0.56*2 1.12 1
0.12*2 0.24 0
0.24*2 0.48 0
0.48*2 0.96 0
0.96*2 1.92 1
0.92*2 1.84 1
0.84*2 1.68 1 -- 第21位
.....
结果很可能是一个无穷尽数,假设这里只取20位,因第21位为1,故产生进位,结果为 0101 0111 0000 1010 0100
综上,整数部分 + 小数部分
得十进制12.34的二进制可近似地表示为 1100.0101 0111 0000 1010 0100
二:存储
现在已经将十进制数12.34转化成二进制,那么计算机是如何表示的呢?
这与科学计数法十分相似,如
十进制科学计数法可表示为 (-1)*S * M * 10^E
S为符号位,1表示负数,0表示正数
M为尾数,范围 1<=M<10,如(1.2, 9.234等)
E为指数(幂)
如 12.34 可表示为 (-1)*0 * 1.234 * 10^1
类似地,二进制科学计数法可表示为 (-1)*S * M * 2^E,尾数 1<=M<2,如
1) 1100.01010111 可表示为 (-1)*0 * 1.10001010111 * 2^3 (小数点左移3)
2) -0.00110 可表示为 (-1)*1 * 1.10 * 2^(-3) (小数点右移3位)
a. 可见指数E因左移右移,而或正或负,为避免指数为负数,在存储时会加上偏移量
单精度时为 127,双精度时为 1023
比如指数E为 (-3),则存储时E 127+(-3) = 124,在取值时再减去相应的偏移量还原数据
b. 因为尾数1<=M<2总是 1.xxx 的形式,为节省空间,是不保存整数部分的1的,如M=1.01,实际保存时M=01
三 举例
写出十进制数 12.34 的单精度存储形式 (保留20位,第21位是1,产生进位,而不是直接截断)
1) 转化二进制 1100.01010111000010100100
2) 写成科学计数法形式 (-1)*S * M * 2^E,
= (-1)*0 * 1.10001010111000010100100 * 2^3
符号位 S = 0,
尾数M = 1.10001010111000010100100(表示时) = 10001010111000010100100(存储时),不保存相等的整数位1
指数E = 127 + 3 = 130 = 10000010 (为避免指数出现负值,加上单精度偏移量 127)
3) 实际存储格式为 0 10000010 10001010111000010100100
= 0100 0001 0100 0101 0111 0000 1010 0100
= 0x 41 45 70 a4
四 总结
综上,有以下结论
1) 浮点数是不精确的
2) 取值范围依赖于指数部分E,单精度类型为8位,范围为-127~128 (有符号的,可能左移,也可能右移),所以最大取值 2^128=3.4E38
3) 有效位数是指尾数M,单精度类型为23位,所以最大有效位是2^23= 8388608(共7位)
4) 相对于定点数,表示范围更大,但运算也更复杂
- 浏览: 30149 次
最新评论
-
ruanxianqing:
按照你的思路8080提供服务,9090升级完毕但是这个时候需要 ...
基于Nginx实现Java项目无缝升级
相关推荐
浮点数(单精度浮点数,双精度浮点数) 浮点数是一种数字表示方法,用于近似表示任意实数。在计算机中,浮点数由一个整数或定点数(即尾数)乘以某个基数(通常是 2)的整数次幂得到。这种表示方法类似于基数为 10 ...
`float_2_char.zip` 提供的代码着重解决了单片机中浮点数(`float`)与字符型(`char`)之间的转换问题,这对于节省存储空间、提高通信效率以及降低错误率非常有用。下面将详细介绍浮点数与字符型之间的转换原理和...
此外,当涉及到32位整数和32位浮点数之间的转换时,整数转浮点数时可能会因为浮点数的精度而产生非预期的结果,而浮点数转整数时可能因四舍五入规则产生误差。因此,在编写程序时,应充分考虑这些潜在问题,并进行...
本文将深入探讨十六进制到浮点数的转换,特别是在LabVIEW环境下的实现。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国国家仪器公司(NI)开发的一种图形化编程语言,广泛应用于工程、...
在数字信号处理领域,浮点数运算在许多高级计算任务中扮演着重要角色。TMS320C3x是一款由德州仪器(TI)推出的数字信号处理器(DSP),它支持浮点运算,使得复杂的数学计算得以高效执行。本文将深入探讨TMS320C3x中...
浮点数转换在计算机科学中是一项基础且重要的概念,特别是在编程和数字处理领域。浮点数,顾名思义,是指可以表示小数部分的数值,与整数相对。它们在计算机内部通常以二进制浮点数的形式存储,遵循IEEE 754标准。这...
在C语言中,将浮点数转换为字符串是一项常见的任务,尤其在需要将数值数据输出到文件或屏幕上时。这个过程通常涉及到`printf`函数家族的使用,它们能够按照指定的格式将各种类型的数据转化为可读的字符串。本文将...
本文将详细介绍如何使用S7-200SMART进行双精度浮点数到单精度浮点数的转换,并提供相应的库文件及使用说明。 1. **浮点数类型**: 浮点数在计算机中分为单精度浮点数(32位,IEEE 754标准)和双精度浮点数(64位,...
在三菱PLC编程中,浮点数运算指令是非常重要的功能,因为工业控制中的许多参数和变量都需要进行浮点数运算。在三菱PLC中,浮点数运算指令能够处理32位的浮点数,并进行比较、变换、四则运算、开方运算以及三角函数...
JavaScript实现浮点数转十六进制字符的过程涉及到了浮点数的表示、IEEE 754标准、二进制与十六进制的转换等多个知识点。由于JavaScript直接使用浮点数转十六进制的功能实现并不直接,因此需要借助其他方法来实现。...
在处理数值计算时,有时我们需要将不同精度的浮点数进行转换,如将64位浮点数转换为32位浮点数。这个过程涉及到浮点数的表示方式、数据类型的转换以及可能的精度损失问题。 64位浮点数,也称为双精度浮点数(Double...
在计算机科学中,十六进制(Hexadecimal)和浮点数(Floating Point)是两种不同的数值表示方式。十六进制是一种逢16进1的数制,常用于编程和计算机内存中表示数据,因为它可以更紧凑地表示二进制数。而浮点数则是一...
浮点数与十六进制转换在计算机科学,尤其是单片机编程中,是常见的数据处理操作。浮点数是一种表示实数的方式,它包括一个符号位、指数部分和尾数部分,而十六进制(Hexadecimal)是数字系统中的一种表示方式,常...
在上述文档中,我们看到的是如何将浮点数在库卡机器人和PLC之间进行转换和通信的过程。浮点数是一种用于表示带有小数的数值类型,通常在计算和精度要求较高的应用中使用。以下是对这一过程的详细说明: 1. **变量...
标题中的“HEX与浮点数相互转换”指的是在计算机科学中处理数字时的一个常见操作。HEX(十六进制)是计算机中广泛使用的数字表示方式,尤其在内存和CPU指令中,而浮点数则用于表示带有小数部分的数值,常用于科学...
在计算机科学中,浮点数是一种用于表示数值的近似方式,主要分为单精度浮点数和双精度浮点数。这些数据类型广泛应用于各种计算,特别是在需要处理大量精确度和范围的数学运算中,例如科学计算、图像处理和游戏开发。...
IEEE754浮点数标准是计算机科学中用于表示和操作浮点数的国际标准,由电气和电子工程师协会(IEEE)制定。这个标准对于数字计算的精确性和可移植性至关重要,广泛应用于现代计算机系统、编程语言以及硬件处理器。在...
浮点数与二进制转换在计算机科学中是至关重要的概念,特别是在通信开发、数据存储和计算领域。本文将深入探讨浮点数和二进制之间的转换,以及如何利用工具进行这种转换。 浮点数是一种表示实数的方式,它允许在有限...
本篇将详细讲解如何在TIA博途V17版本中,利用全局功能块(FC,Function Block)库文件实现对浮点数的截取,并自定义小数点后的位数。 首先,浮点数在PLC编程中常用于处理需要较高精度的数值运算。在TIA博途V17中,...
浮点数在计算机科学中扮演着至关重要的角色,特别是在数值计算、图形处理和科学计算等领域。浮点数的表示方式是基于二进制的,但为了方便人类阅读和理解,通常我们使用十进制形式。浮点数与二进制之间的转换是理解和...