IEEE标准754浮点数转换【原理篇】

目录

  • IEEE标准754浮点数

IEEE标准754浮点数

  • IEEE浮点运算标准(IEEE 754)是电气和电子工程师协会(IEEE)于1985年建立的浮点计算技术标准。
  • 该标准解决了各种浮点实现中发现的许多问题,这些问题使它们难以可靠地使用,并降低了它们的可移植性。
  • IEEE标准754浮点数是当今计算机上实数最常见的表示形式,包括基于intel的PC、mac和大多数Unix平台。
  • 有几种表示浮点数的方法,但是IEEE 754在大多数情况下是最有效的。IEEE 754有3个基本组件:
  1. 尾数的符号 — 这和名字一样简单。0代表正数,1代表负数。
  2. 偏置指数 — 指数字段需要同时表示正指数和负指数。为了得到存储的指数,向实际指数添加了一个偏差。
  3. 正常的尾数 — 尾数是科学表示法中的数字或浮点数的一部分,由它的有效数字组成。这里只有两个数字,即0和1。所以一个标准尾数是小数点左边只有一个1的数。

IEEE 754数字由上述三部分组成:单精度和双精度。
IEEE标准754浮点数转换【原理篇】_第1张图片
IEEE标准754浮点数转换【原理篇】_第2张图片

TYPES SIGN BIASED EXPONENT NORMALISED MANTISA BIAS
Single precision 1(31st bit) 8(30-23) 23(22-0) 127
Double precision 1(63rd bit) 11(62-52) 52(52-0) 1023

示例

85.125
85 = 1010101
0.125 = 001
85.125 = 1010101.001
       =1.010101001 x 2^6 
sign = 0 

1. Single precision:
biased exponent 127+6=133
133 = 10000101
Normalised mantisa = 010101001
we will add 0's to complete the 23 bits

The IEEE 754 Single precision is:
= 0 10000101 01010100100000000000000
This can be written in hexadecimal form 42AA4000

2. Double precision:
biased exponent 1023+6=1029
1029 = 10000000101
Normalised mantisa = 010101001
we will add 0's to complete the 52 bits

The IEEE 754 Double precision is:
= 0 10000000101 0101010010000000000000000000000000000000000000000000
This can be written in hexadecimal form 4055480000000000 

特殊值:IEEE保留了一些可能产生歧义的值。

  • 0
    0是一个特殊的值,用0的指数和尾数表示。-0和+0是不同的值,尽管它们都是相等的。
  • 特殊函数
    如果指数都是0,但尾数不是,那么该值就是一个非正态化的数。这意味着这个数在二进制点之前没有一个假设的前导。
  • 无穷
    值+∞和-∞用所有1的指数和所有0的尾数表示。符号位区分负无穷和正无穷。IEEE中定义了具有无限值的操作。
  • Not A Number (NAN)
    值NAN用于表示一个错误值。当指数字段都是带有0符号位或尾数的1,而不是1后面跟着0时,就可以表示出这种情况。这是一个特殊的值,可以用来表示一个还没有值的变量。
EXPONENT MANTISA VALUE
0 0 exact 0
255 0 Infinity
0 not 0 denormalised
255 not 0 Not a number (NAN)

类似的双精度(只是用2049替换255),浮点数的范围:

DENORMALIZED NORMALIZED APPROXIMATE DECIMAL
Single Precision ± 2-149 to (1 – 2-23)×2-126 ± 2-126 to (2 – 2-23)×2127 ± approximately 10-44.85 to approximately 1038.53
Double Precision ± 2-1074 to (1 – 2-52)×2-1022 ± 2-1022 to (2 – 2-52)×21023 ± approximately 10-323.3 to approximately 10308.3

正浮点数的范围可以分为标准化数和非正规化数,它们只使用分数精度的一部分。因为每个浮点数都有一个对应的负值,所以上面的范围都是围绕0对称的。正浮点数的范围可以分为标准化数和非正规化数,它们只使用分数精度的一部分。因为每个浮点数都有一个对应的负值,所以上面的范围都是围绕0对称的。

单精度浮点数无法用目前提出的方案表示五个不同的数值范围:

  1. 小于-(2 - 2-23)×2127的负数(负溢出)
  2. 大于- 2-149的负数(负潜流)
  3. 0
  4. 小于2-149的正数(正潜流)
  5. 大于(2 - 2-23)×2127的正数(正溢出)

溢出通常意味着值增长得太大而无法表示。下溢是一个不太严重的问题,因为它只是表示精度的损失,这是保证接近于零。

有限IEEE浮点数总有效范围表如下:

BINARY DECIMAL
Single ± (2 – 2-23) × 2127 approximately ± 1038.53
Double ± (2 – 2-52) × 21023 approximately ± 10308.25

特别的

OPERATION RESULT
n ÷ ±Infinity 0
±Infinity × ±Infinity ±Infinity
±nonZero ÷ ±0 ±Infinity
±finite × ±Infinity ±Infinity
Infinity + Infinity
Infinity – -Infinity
+Infinity
-Infinity – Infinity
-Infinity + – Infinity
NaN
±0 ÷ ±0 NaN
±Infinity ÷ ±Infinity NaN
±Infinity × 0 NaN
NaN == NaN False

你可能感兴趣的:(#,通信协议---Modbus,通讯协议)