IEEE浮点数表示法

原创 2004年11月01日 20:00:00

题目:
(2004-11-01 16:32:40)   天堂雨(124059489)

main()
{
        float a,b;
        a=123456.789e5;
        b=a+20;
        printf("%f",b);
}
 


书上是这样解释的:

程序运行时,输出b的值与a相等。原因是:a的值比20大很多,a+20的理论值应是12345678920,而一个实型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确的表示该数。运行程序得到的a和b的值都是12345678848.000000,可以看到前8位是准确的,后几位是不准确的,把20加在后几位上,是无意义的。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。与此类似,用程序计算1.0/3*3的结果并不等于1。

我的疑问是:12345678848.000000这个数字是怎么来的?

回答:
(2004-11-01 19:43:32)   mmpire(23433725)

IEEE浮点数表示法中,一个float数以32位存储,具体分配是:
31位:符号位
30-23位:指数位
22-0:数位
也就是说,只能有23位用来存数(实际可存24位二进制数,因为首位总是1可以略去),而12345678900转成二进制后有33位,如下:
10 1101 1111 1101 1100 0001 1100 0011 0100
只存取其前24位,计算的时候后面9位补上0,得:
10 1101 1111 1101 1100 0001 1100 0000 0000
用微软自带的计算器转一下,刚好是12345678848



32位float数的IEEE存储过程
*********************************************
12345678900
12345678920

10 1101 1111 1101 1100 0001 1100 0011 0100
1.01101 1111 1101 1100 0001 1100 0011 0100
10 1101 1111 1101 1100 0001 1100 0000 0000
33位
最高位1去掉
0 1101 1111 1101 1100 0001 1100 0011 0100
控制在23位
0 1101 1111 1101 1100 0001 11
0 1101 1111 1101 1100 0001 11
指数位加127
33+127=160
10100000

0 (1010 0000) 0110 1111 1110 1110 0000 111
01010000 00110111 11110111 00000111
50  37   F7    07
翻过来就是:
07 F7 37 50
101101111111011100000111

IEEE制定的浮点数表示法

 基础知识: 十进制转十六进制; 十六进制转二进制; IEEE制定的浮点数表示规则; 了解: 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double...
  • chen_lady
  • chen_lady
  • 2016年04月09日 15:33
  • 5390

浮点数的二进制表示(IEEE 754标准)

IEEE 754标准的浮点数的转换计算
  • fwb330198372
  • fwb330198372
  • 2017年04月19日 12:55
  • 1632

析IEEE浮点数表示法!

众所周知,计算机中的所有数据都是以二进制表示的,浮点数也不例外。然而浮点数的二进制表示法却不像定点数那么简单了。先澄清一个概念,浮点数并不一定等于小数,定点数也并不一定就是整数。所谓浮点数就是小数点在...
  • zhaomu
  • zhaomu
  • 2006年06月27日 14:42
  • 3271

IEEE浮点数表示法总结

标  题:IEEE浮点数表示法总结整理者:CmdHack一:小数部分为0(123456.0)二:整数部分为0(0.125)三:小数整数非0(123456.125)都将它们的整数部分和小数部分的二进制写...
  • cmdhack
  • cmdhack
  • 2010年03月14日 01:07
  • 521

IEEE浮点数表示法(转)

月初还在上班的时候,就天天盼望着过年放长假,然而终于熬到了过年,却发现自己的12天的长假将在碌碌无为中度过,朋友们又一个接一个的远去,心里真是拔凉拔凉的啊!最近版上的人气有点低落,连违规率(不敢说犯罪...
  • liaofan009
  • liaofan009
  • 2010年05月26日 23:27
  • 293

析IEEE浮点数表示法

众所周知,计算机中的所有数据都是以二进制表示的,浮点数也不例外。然而浮点数的二进制表示法却不像定点数那么简单了。先澄清一个概念,浮点数并不一定等于小数,定点数也并不一定就是整数。所谓浮点数就是小数点在...
  • besthyq
  • besthyq
  • 2006年09月01日 08:38
  • 947

IEEE浮点数表示法

  月初还在上班的时候,就天天盼望着过年放长假,然而终于熬到了过年,却发现自己的12天的长假将在碌碌无为中度过,朋友们又一个接一个的远去,心里真是拔凉拔凉的啊!最近版上的人气有点低落,连违规率(不敢...
  • god9me
  • god9me
  • 2010年07月20日 13:27
  • 450

32位单精度浮点数表示法

32位单精度浮点数表示法
  • liubing8609
  • liubing8609
  • 2017年12月19日 16:28
  • 176

IEEE754浮点数表示,为什么偏移码是127?为什么偏移码范围是1~254?

以单精度浮点数为例 IEEE754规定,s作为符号位,用0(正),1(负)表示,E作为阶码用移码表示(后面解释为什么用移码),M作为尾数,并规定最高位总为1,因此将1省略,简称隐藏位。 填...
  • a7515780
  • a7515780
  • 2017年03月05日 17:18
  • 1081

IEEE浮点标准详解

1 IEEE浮点数 1.1 格式 IEEE定义了多种浮点格式,但最常见的是三种类型:单精度、双精度、扩展双精度,分别适用于不同的计算要求。一般而言,单精度适合一般计算,双精度适合科学计算,扩展双精...
  • sinat_33248998
  • sinat_33248998
  • 2016年07月05日 09:39
  • 2453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IEEE浮点数表示法
举报原因:
原因补充:

(最多只允许输入30个字)