IEEE 754标准浮点数

一、IEEE 754浮点数的表示

浮点数数学表示

符号位(sign):决定该浮点数的正负

尾数(significand):二进制小数,范围在[1,2)或者[0,1)中

阶码(exponent):对浮点数加权,权重为2的E次幂

单精度浮点数:在单精度的浮点数中,符号位编码为1位二进制位,阶码编码为为8位二进制位,尾数编码为23位二进制位;

双精度浮点数:在双精度浮点数中,符号位编码为1位二进制位,阶码编码为为11位二进制位,尾数编码为52位二进制位;

二、浮点数编码知识储备

<1>浮点数阶码的移码表示法:

移码为在真值的基础上加上一个称为偏置值(Bias)的常数,相当于在X轴上移动了若干个单位;移码定义为

使用移码的优点:可以将真值映射到一个正数域,将移码视为无符号数,可以直接按照无符号整数的比较规则比较阶码的大小。

<2>规格化

为了充分利用尾数的有效位数,通常规定浮点数尾数的最高位需要为一个有效值,这即为浮点数的规格化。

采用浮点数的规格化形式,则浮点数尾数的绝对值大小为 0.5 <= |M| < 1

三、IEEE 754浮点数编码方式

根据阶码的不同,浮点数被编码的情况可以分为3种情况:

<1>规格化数:

1)阶码编码:阶码的二进制编码不全为0和1;使用移码表示阶码的值,阶码的值为E = e -Bias,其中Bias = 2^(k-1)-1;

2)尾数编码:规格化数的尾数编码为浮点数的规格化表示方法,尾数二进制编码表示为

尾数定义为M = 1 + f,这种表示为隐含的以1开头的表示

<2>非规格化数:

1)解码编码:阶码的二进制编码全部为0,在这种情况下,阶码值是 E = 1 – Bias;

2)尾数编码:尾数的值M=f,不包含隐含的开头的1;

3)用途:

(1)表示数值0

(2)表示接近数值0的数

<3>特殊值:

1)阶码编码:阶码编码全部为1

2)尾数编码:尾数编码全部为0时,表示无穷,S = 0表示正无穷,S=1表示负无穷;当尾数不全为0时,结果数值为NaN(not a number),

即表示不是一个数值

四、IEEE 754浮点编码的性质

以8位浮点数为例,其中阶码编码为4位,尾数编码为3位,如图:

<1>正浮点数的大小按照位表达的字典序升序保持升序;

<2>非规格化浮点数与规格化浮点数之间存在平滑的转换,非规格化浮点数可以平滑转换为规格浮点数;

时间: 2024-10-08 05:22:05

IEEE 754标准浮点数的相关文章

如何理解IEEE 754标准对Java中float值和double值的规定

在Java语言中,我们可以使用float和double这两种基本数据类型来表示特定的数据. 这两种数据类型,本质上是浮点数(floating-point number),浮点是一种对于实数的近似值数值表现法,由一个有效数字加上幂数来表示. 之所以使用浮点数,是因为计算机在使用二进制运算的过程中,无法将所有的十进制小数准确的换算为二进制,只能使用近似值来表示. 使用浮点数表示数值的方法很多,在Java中,和C语言一样,float和double都采用了使用最为广泛的IEEE 754标准. IEEE

IEEE 754标准

IEEE 754-1985 was an industry standard for representing floating-point numbers in computers, officially adopted in 1985 and superseded in 2008 by IEEE 754-2008. During its 23 years, it was the most widely used format for floating-point computation. I

IEEE 754浮点数表示标准

二进制数的科学计数法 C++中使用的浮点数包括采用的是IEEE标准下的浮点数表示方法.我们知道在数学中可以将任何十进制的数写成以10为底的科学计数法的形式,如下 其中显而易见,因为如果a比10大或者比1小都能够再次写成10的指数的形式,如 然而要想在二进制的世界中将数字写成以10为底的科学计数法的形式,着实有点麻烦,因为你首先需要将二进制的数先化成10进制的表示方法,然后才能写成科学计数法的形式.但是如果我们稍微变通一下科学计数法的标记方法,问题就变得特别的简单了.之所以数学上使用的科学计数法选

IEEE 754 浮点数的表示精度探讨

IEEE 754 浮点数的表示精度探讨 前言 从网上看到不少程序员对浮点数精度问题有很多疑问,在论坛上发贴询问,很多热心人给予了解答,但我发现一些解答中有些许小的错误和认识不当之处.我曾经做过数值算法程序,虽然基本可用,但是被浮点数精度问题所困扰:事情过后,我花了一点时间搜集资料,并仔细研究,有些心得体会,愿意与大家分享,希望对IEEE 754标准中的二进制浮点数精度及其相关问题给予较为详尽的解释.当然,文中任何错误由本人造成,由我承担,特此声明. 1. 什么是IEEE 754标准? 目前支持二

浮点数标准IEEE 754相关材料

下面的内容不是必须掌握的,是为了满足一些好奇心强同学的需要.IEEE 754目前为C标准所支持,而且许多硬件均支持,可以说目前浮点数处理基本是IEEE 754的天下.http://zh.wikipedia.org/wiki/IEEE_754 中文材料1.4 IEEE 浮点运算标准 - 华东师范大学数学系这个比较简略,http://www.pediy.com/kssd/pediy06/pediy6610.htm 该文中有几个更具体的例子,本人未仔细核实http://people.uncw.edu/

IEEE 754 浮点数在计算机中的表示方法

IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”:它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式). IEEE 754规定了四种表示浮点数值的方式:单精确度(32位).双精确度(64位).延伸单精确度(43比特以上,很少使

程序员必知之浮点数运算原理详解

导读:浮点数运算是一个非常有技术含量的话题,不太容易掌握.许多程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题. 许多人使用float/double进行货币计算时经常会犯错.这篇文章是这一系列中的精华,所有的软件开发人员都应该读一下. 随着你经验的增长,你肯定 想去深入了解一些常见的东西的细节,浮点数运算就是其中之一. 1. 什么是浮点数? 在计算机系统的发展过程中,曾经提出过多种方法表达实数. [1]典型的比如相对于浮点数的定点数(Fixed Point Num

计算机中的浮点数(IEEE754)

IEEE读作[a?-'tr?p(?)l-i:],电气和电子工程师协会.这个是一个包括所有电子和计算机技术的专业团体,制定标准是其工作之一. IEEE浮点数算术标准(IEEE 754)是最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用. 整数运算和浮点数运算会有不同的数学属性是因为它们处理数字表示有限性的方式不同——整数的表示算然只能编码一个相对较小的数字范围,但是这种表示是精确的:而浮点数虽然可以编码一个较大的数值范围,但是这种表示只是近似的. IEEE规定的浮点数编码会将一个浮点数转

计算机内存中浮点数的表示

浮点概念的引入 在计算机系统的发展过程中,曾经提出过多种方法表达实数.比如定点数表示法, 这种表示方法将小数点的位置固定在某一个位置,比如: 11001000.00110001,这个16位(2字节) 的定点数用前面8位表示整数部分,后面8位表示小数部分,这种方法直观,但是固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数.最终,绝大多数现代计算机遵循IEEE754,即IEEE二进制浮点数算数标准,利用科学计数法来表达实数,即用一个尾数(Mantissa o