青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

統計

  • 隨筆 - 50
  • 文章 - 42
  • 評論 - 147
  • 引用 - 0

留言簿(6)

隨筆分類

文章分類

Link

搜索

  •  

積分與排名

  • 積分 - 167517
  • 排名 - 159

最新評論

閱讀排行榜

評論排行榜

解讀IEEE標準754:浮點數表示
一、背景
  在IEEE標準754之前,業界并沒有一個統一的浮點數標準,相反,很多計算機制造商都設計自己的浮點數規則,以及運算細節。那時,實現的速度和簡易性比數字的精確性更受重視。
  直到1985年Intel打算為其的8086微處理器引進一種浮點數協處理器的時候,聰明地意識到,作為設計芯片者的電子工程師和固體物理學家們,也許并不能通過數值分析來選擇最合理的浮點數二進制格式。于是Intel在請加州大學伯克利分校的 WilliamKahan教授──最優秀的數值分析家之一來為8087 FPU設計浮點數格式;而這個家伙又找來兩個專家來協助他,于是就有了KCS組合(Kahn, Coonan, andStone)。 他們共同完成了Intel的浮點數格式設計,而且完成地如此出色,以致于IEEE組織決定采用一個非常接近KCS的方案作為IEEE的標準浮點格式。目前,幾乎所有計算機都支持該標準,大大改善了科學應用程序的可移植性。

二、表示形式
  從表面上看,浮點數也是一串0和1構成的位序列(bit sequence),并不是三頭六臂的怪物,更不會咬人。然而IEEE標準從邏輯上用三元組{S,E,M}表示一個數N,如下圖所示:  N的實際值n由下列式子表示:

其中:
  ★ n,s,e,m分別為N,S,E,M對應的實際數值,而N,S,E,M僅僅是一串二進制位。
  ★ S(sign)表示N的符號位。對應值s滿足:n>0時,s=0; n<0時,s=1。
  ★ E(exponent)表示N的指數位,位于S和M之間的若干位。對應值e值也可正可負。
  ★ M(mantissa)表示N的尾數位,恰好,它位于N末尾。M也叫有效數字位(sinificand)、系數位(coefficient), 甚至被稱作“小數”。

三、浮點數格式

  IEEE標準754規定了三種浮點數格式:單精度、雙精度、擴展精度。前兩者正好對應C語言里頭的float、double或者FORTRAN里頭的real、double精度類型。限于篇幅,本文僅介紹單精度、雙精度浮點格式。
  ★ 單精度:N共32位,其中S占1位,E占8位,M占23位。
  ★ 雙精度:N共64位,其中S占1位,E占11位,M占52位。


      值得注意的是,M雖然是23位或者52位,但它們只是表示小數點之后的二進制位數,也就是說,假定M為“010110011...”,在二進制數值上其實是“.010110011...”。而事實上,標準規定小數點左邊還有一個隱含位,這個隱含位通常,哦不,應該說絕大多數情況下是1,那什么情況下是0呢?答案是N對應的n非常小的時候,比如小于2^(-126)(32位單精度浮點數)。不要困惑怎么計算出來的,看到后面你就會明白??傊?,隱含位算是賺來了一位精度,于是M對應的m最后結果可能是"m=1.010110011...”或者“m=0.010110011...”

四、計算e、m
  首先將提到令初學者頭疼的“規格化(normalized)”、“非規格化(denormalized)”。噢,其實并沒有這么難的,跟我來!掌握它以后你會發現一切都很優雅,更美妙的是,規格化、非規格化本身的概念幾乎不怎么重要。請牢記這句話:規格化與否全看指數E!
  下面分三種情況討論E,并分別計算e和m:
  
  1、規格化:當E的二進制位不全為0,也不全為1時,N為規格化形式。此時e被解釋為表示偏置(biased)形式的整數,e值計算公式如下圖所示:

  上圖中,|E|表示E的二進制序列表示的整數值,例如E為"10000100",則|E|=132,e=132-127=5 。 k則表示E的位數,對單精度來說,k=8,則bias=127,對雙精度來說,k=11,則bias=1023。
  此時m的計算公式如下圖所示:
  

  標準規定此時小數點左側的隱含位為1,那么m=|1.M|。如M="101",則|1.M|=|1.101|=1.625,即 m=1.625

  2、非規格化:當E的二進制位全部為0時,N為非規格化形式。此時e,m的計算都非常簡單。

  注意,此時小數點左側的隱含位為0。 為什么e會等于(1-bias)而不是(-bias),這主要是為規格化數值、非規格化數值之間的平滑過渡設計的。后文我們還會繼續討論。
  有了非規格化形式,我們就可以表示0了。把符號位S值1,其余所有位均置0后,我們得到了 -0.0; 同理,把所有位均置0,則得到+0.0。非規格化數還有其他用途,比如表示非常接近0的小數,而且這些小數均勻地接近0,稱為“逐漸下溢(graduallyunderflow)”屬性。
  
  3、特殊數值: 當E的二進制位全為1時為特殊數值。此時,若M的二進制位全為0,則n表示無窮大,若S為1則為負無窮大,若S為0則為正無窮大; 若M的二進制位不全為0時,表示NaN(Not a Number),表示這不是一個合法實數或無窮,或者該數未經初始化。
  
五、范例
  仔細研讀第四點后,再回憶一下文章開頭計算n的公式,你應該寫出一個浮點編碼的實際值n了吧?還不能嗎?不急,我先給你示范一下。我們假定N是一個8位浮點數,其中,S占1位,E占4位,M占3位。下面這張表羅列了N可能的正數形式,也包含了e、m等值,請你對照著這張表,重溫一下第四點,你會慢慢明白的。說實在的,這張表花了我不少功夫呢,幸好TeX畫表格還算省事! 
  

  這張表里頭有很多有趣的地方,我提醒一下:
  ★ 看 N 列,從上到下,二進制位表示是均勻遞增的,且增量都是一個最小二進制位。這不是偶然,正是巧妙設計的結果。觀察最大的非規格數,發現恰好就是M全為1, E全為0的情況。于是我們求出最大的非規格數為:

  上面的公式中,h為M的位數(如范例中為3)。注意,公式等號右邊的第一項同時又是最小規格數的值(如范例中為 8/512 );第二項則正是最小非規格數的值(如范例中為1/512)即該浮點數能表示的最小正數。
  ★ 看 m 列,規格化數都是 1+ x 的形式,這個1正是隱含位1; 而非規格化數隱含位為0, 所以沒有 "1+" 。
  ★ 看 n 列,非規格化數從上到下的增量都是 1/512,且過渡到規格化數時,增量是平滑的,依舊是1/512。這正是非規格化數中e等于(1-bias)而不是(-bias)的緣故,也是巧妙設計的結果。再繼續往下看,發現增量值逐漸增大??梢?,浮點數的取值范圍不是均勻的。
  
六、實戰
  我們用一小段匯編來測試一下,浮點數在內存中是如何表示的。測試環境: GentooLinux2006.0/GNU assembler version 2.16.1/GNU gdb 6.4/AMD XP1600+。 如下所示
代碼:

~/coding/assemble $  gdb float
GNU gdb 6.4
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

(gdb) list
1 .section .data
2 f1:
3     .float  5
4 f2:
5     .float  0.1   
6 .section .text
7     .global _start
8 _start:
9     nop
10
(gdb) x/f &f1
0x80490a4 <f1>: 5
(gdb) x/xw &f1
0x80490a4 <f1>: 0x40a00000
(gdb) x/f &f2
0x80490a8 <f2>: 0.100000001
(gdb) x/xw &f2
0x80490a8 <f2>: 0x3dcccccd
(gdb)



  從上面的gdb命令結果可以看出,浮點數5被表示為 0x40a00000,二進制形式為( 0100 0000 1010 0000 ... 0000 0000)。紅色數字為E,可以看出|E|=129>0, 則e=129-bias=129-127=2 ; 藍色數字為M,且|E|>0,說明是規格化數,則m=|1.M|=|1.01000..000|=1.25 ; 由n的計算公式可以求得 n=(-1)^0 *1.25 * 2^2 = 5, 結果被驗證了。
  同樣,你也可以驗證一下十進制浮點數0.1的二進制形式是否正確,你會發現,0.1不能表示為有限個二進制位,因此在內存中的表示是舍入(rounding)以后的結果,即 0x3dcccccd, 十進制為0.100000001, 誤差0.000000001由此產生了。

posted on 2009-10-11 23:46 pear_li 閱讀(995) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产伦精品一区二区三区四区免费 | 欧美日韩日韩| 亚洲盗摄视频| 欧美第一黄色网| 欧美精品18+| 午夜视频在线观看一区二区三区| 亚洲天堂第二页| 国产偷久久久精品专区| 久久久999国产| 女人色偷偷aa久久天堂| 在线视频精品一| 先锋影音国产精品| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美护士18xxxxhd| 欧美日韩p片| 欧美主播一区二区三区| 麻豆精品网站| 亚洲欧美日本伦理| 久久综合久色欧美综合狠狠| 亚洲精品午夜| 欧美亚洲网站| 日韩视频永久免费观看| 亚洲欧美日韩综合aⅴ视频| 在线看无码的免费网站| 日韩午夜激情av| 韩国v欧美v日本v亚洲v| 亚洲精品国久久99热| 国产精品色午夜在线观看| 免费不卡在线观看| 欧美午夜免费电影| 欧美成人小视频| 国产精品一级| 亚洲二区在线观看| 国产女人18毛片水18精品| 亚洲高清在线观看| 国产日韩欧美三区| 亚洲精品美女免费| 一区免费观看视频| 亚洲伊人网站| 一区二区高清视频在线观看| 久久久久成人精品免费播放动漫| 亚洲无人区一区| 欧美 日韩 国产一区二区在线视频| 亚洲欧美一区二区三区久久| 欧美国产亚洲另类动漫| 久久久综合免费视频| 国产精品美女视频网站| 亚洲片区在线| 亚洲国产片色| 久久婷婷国产综合精品青草| 欧美在线免费播放| 国产精品高潮在线| 亚洲三级免费电影| 最近中文字幕日韩精品| 久久精品国产v日韩v亚洲 | 亚洲高清不卡在线| 欧美夜福利tv在线| 欧美亚洲一区二区三区| 欧美特黄a级高清免费大片a级| 亚洲国产精彩中文乱码av在线播放| 国产精品一区免费在线观看| 一本一本久久| 亚洲欧美日韩精品久久| 欧美三日本三级少妇三99| 亚洲欧洲精品一区二区三区波多野1战4 | 国产亚洲亚洲| 欧美一区二区三区四区在线| 亚洲欧美在线免费观看| 欧美小视频在线观看| 一区二区电影免费观看| 一区二区三区欧美| 欧美精品一区二区三区蜜桃 | 欧美在线欧美在线| 国产精品少妇自拍| 午夜在线电影亚洲一区| 久久精品人人做人人综合| 国产精品色一区二区三区| 亚洲在线观看视频| 久久精品道一区二区三区| 国产网站欧美日韩免费精品在线观看 | 亚洲无限av看| 久久国产视频网| 亚洲电影免费在线观看| 免费成人激情视频| 亚洲免费观看高清完整版在线观看熊 | 欧美极品一区| 亚洲视频欧洲视频| 欧美一区=区| 一色屋精品亚洲香蕉网站| 乱中年女人伦av一区二区| 亚洲欧洲日本一区二区三区| 亚洲少妇在线| 韩国欧美国产1区| 欧美另类在线播放| 亚洲欧美日韩爽爽影院| 免费久久久一本精品久久区| 日韩视频在线播放| 国产免费成人在线视频| 麻豆成人综合网| 亚洲午夜精品一区二区| 美女诱惑黄网站一区| 中文av一区二区| 国产曰批免费观看久久久| 欧美3dxxxxhd| 欧美一区成人| 日韩视频在线观看| 麻豆精品视频在线观看| 亚洲一区www| 亚洲国产精品成人精品| 国产精品久久久久久久久免费 | 欧美三级电影网| 欧美资源在线| 亚洲视频视频在线| 亚洲第一色在线| 久久久亚洲国产天美传媒修理工 | 久久久久国产一区二区| 99视频精品全部免费在线| 国产视频一区在线观看一区免费| 欧美国产日韩免费| 久久精品国产999大香线蕉| 亚洲伦理一区| 亚洲福利国产精品| 麻豆国产精品va在线观看不卡| 亚洲综合成人在线| 亚洲精品乱码久久久久久蜜桃91| 国产手机视频一区二区| 国产精品v欧美精品v日韩精品| 免费成人小视频| 久久深夜福利免费观看| 午夜一级久久| 午夜精品影院| 亚洲欧美亚洲| 亚洲欧美日韩国产综合在线| 亚洲美女精品一区| 亚洲精品国产精品久久清纯直播 | 亚洲一区二三| 一区二区精品在线| 99re热这里只有精品视频| 极品少妇一区二区| 国产在线拍偷自揄拍精品| 国产精品午夜电影| 国产精品一二三| 国产精品普通话对白| 国产精品99一区二区| 欧美日韩亚洲一区二区三区在线观看 | 悠悠资源网亚洲青| 国产中文一区| 精品av久久707| 亚洲电影在线免费观看| 亚洲福利精品| 亚洲精品综合| 一个色综合av| 午夜电影亚洲| 久久gogo国模啪啪人体图| 久久疯狂做爰流白浆xx| 久久久久久亚洲精品杨幂换脸 | 欧美福利电影在线观看| 欧美不卡视频一区| 亚洲第一区在线| 日韩视频一区二区三区| 在线视频亚洲| 欧美在线你懂的| 玖玖综合伊人| 欧美精品一区二区三区蜜桃| 欧美日韩一区二区视频在线观看| 欧美午夜大胆人体| 国产欧美在线观看| 亚洲成人在线视频网站| 亚洲伦理久久| 先锋影音国产一区| 美女主播一区| 99精品99久久久久久宅男| 亚洲与欧洲av电影| 久久综合久久综合这里只有精品 | 欧美日韩在线视频一区二区| 国产精品久久久久毛片软件 | 亚洲免费观看| 久久国产主播| 亚洲片在线资源| 欧美一区成人| 欧美日韩国产精品一卡| 国产亚洲亚洲| 中日韩午夜理伦电影免费| 久久久之久亚州精品露出| 亚洲欧洲视频| 久久精品日韩| 国产精品久久久久久久久久久久久| 国产亚洲精品aa午夜观看| 91久久亚洲| 久久久女女女女999久久| 亚洲伦伦在线| 久久久欧美一区二区| 国产精品白丝黑袜喷水久久久 | 国产精品日日摸夜夜摸av| 在线观看欧美视频| 欧美一区二区视频网站| 亚洲人成亚洲人成在线观看| 欧美在线啊v| 国产精品日韩欧美| 亚洲国产综合91精品麻豆|