珞珈山水BBS电脑网络程序人生 → 单文区文章阅读

单文区文章阅读 [返回]
发信人: DreamRen (追梦人), 信区: Programm
标  题: Re: 请教一个最简单的C问题,高手来帮我
发信站: BBS 珞珈山水站 (Thu Mar 17 14:45:39 2005)

恩,这个东西要到大四<体系结构>才会讲.
可惜找工作的找工作,考研的考研,没多少人认真学,哎```
偶也没学好!

不知道解答的对不对?
IEEE754标准浮点数据格式:
--------------------------------------------------
| S |      E           |           M             |
--------------------------------------------------
 1位      8位                     23位
若E=0,且M=0,则N为0。
若E=0,且M≠0,则N=(-1)S·2-126·(0.M)。为非规格化数。
若1≤E≤254,则N=(-1)S·2E-127·(1.M)。为规格化数。
若E=255,且M≠0,则N=NaN(‘非数值’)。
若E=255,且M=0,则N=(-1)S∝(无穷大)。
计算:N=(-1)^0*2^(E-127)*M

编译后生成的语句:
4:      float f=123.456f;
00401028   mov         dword ptr [ebp-4],42F6E979h

取出十六进制数42F6E979,化为二进制为
0*100 0010 1*111 0110 1110 1001 0111 1001(*为区分点)
s=0,E=133,M=(1/2+1/4+1/8+1/32+1/64+1/256+1/512+...)=0.92900002002716064453125

N=1*64*(1+0.92900002002716064453125)=123.45600128173828125

哈哈...
大功告成,与结果吻合.
累....

如果真要结果的话,可以这样:
 printf("f=%0.3f\n",f);

【 在 skyzinc (似水年华) 的大作中提到: 】
: main()
: {
:   float f=123.456;
: ...................



--

※ 修改:·DreamRen 於 Mar 18 14:32:09 2005 修改本文·[FROM: 202.114.121.*]
※ 来源:·珞珈山水BBS站 http://bbs.whu.edu.cn·[FROM: 202.114.121.*]
[返回单文区目录]

武汉大学BBS 珞珈山水站 All rights reserved.
wForum , 页面执行时间:17.132毫秒