• <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>

            兔子的技術博客

            兔子

               :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

            留言簿(10)

            最新評論

            閱讀排行榜

            評論排行榜

            C/C++的浮點數(shù)據類型有float和double兩種。
            類型float大小為4字節(jié),即32位,內存中的存儲方式如下:
             符號位(1 bit) 指數(shù)(8 bit) 尾數(shù)(23 bit)


            類型double大小為8字節(jié),即64位,內存布局如下:
            符號位(1 bit) 指數(shù)(11 bit) 尾數(shù)(52 bit)


             
            符號位決定浮點數(shù)的正負,0正1負。
            指數(shù)和尾數(shù)均從浮點數(shù)的二進制科學計數(shù)形式中獲取。
            如,十進制浮點數(shù)2.5的二進制形式為10.1,轉換為科學計數(shù)法形式為(1.01)*(10^1),由此可知指數(shù)為1,尾數(shù)(即科學計數(shù)法的小數(shù)部分)為01。
            根據浮點數(shù)的存儲標準(IEEE制定),float類型指數(shù)的起始數(shù)為127(二進制0111 1111),double類型指數(shù)的起始數(shù)為1023(二進制011 1111 1111),在此基礎上加指數(shù),得到的就是內存中指數(shù)的表示形式。尾數(shù)則直接填入,如果空間多余則以0補齊,如果空間不夠則0舍1入。所以float和double類型分別表示的2.5如下(二進制):
            符號位 指數(shù) 尾數(shù)
            0 1000 0000 010 0000 0000 0000 0000 0000
            0 100 0000 0000 0100 0000 0000 0000 0000 0000 0000
            0000 0000 0000 0000 0000 0000


            浮點數(shù)2.5可以用二進制小數(shù)準確表示(2.5=1*(2^1)+0*(2^0)+1*(2^-1)),但很多小數(shù)不可以準確表示,其二進制形式的小數(shù)部分會無限循環(huán),如浮點數(shù)-1.2表示如下(二進制):
            符號位 指數(shù) 尾數(shù)
            1 0111 1111 0011 0011 0011 0011 0011 010
            1 011 1111 1111 0011 0011 0011 0011 0011 0011 0011
            0011 0011 0011 0011 0011 0011


            由于對無限循環(huán)尾數(shù)的截取遵循0舍1入,尾數(shù)的第21~24位為0011,第53~56位為0011,而float尾數(shù)容量為23位,double尾數(shù)容量為52位,所以,float形式的最后三位因進位而成010,double形式則沒有進位發(fā)生。
             
            類型float和double通過==,>,<等比較不會引起編譯錯誤,但是非常可能得到錯誤的結果。這是因為它們的內存分布不同,不可以直接比較。正確的方法是轉換為同一類型后比較兩者差值,如果結果小于規(guī)定的小值,則視為相等。
            如,一個比較double的實現(xiàn):
            http://metasharp.net/index.php?title=How_to_compare_double_or_float_in_Cpp
            另外,本文參考了如下webs:
            http://cdatatype.blogspot.com/2008/01/memory-map-of-floatdouble.html
            http://blog.csdn.net/hzb1983/archive/2007/09/24/1798555.aspx
             
            P.S.
            1)
            IEEE浮點數(shù)標準:     4字節(jié)浮點數(shù):1位符號位,8位階數(shù)(基數(shù)為127的移碼),23位尾數(shù);     8字節(jié)浮點數(shù):1位符號位,11位階數(shù)(基數(shù)為1023的移碼),52位尾數(shù)
            2 )
            在VC中: float數(shù)值范圍約在 -10e38~10e38,并提供7位有效數(shù)字位,絕對值小于10e38地數(shù)被處理成零值 double數(shù)值范圍約在-10e308~10e308,并提供15~16位有效數(shù)字,絕對值小于10e308地數(shù)被處理成零值


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/vinsendai/archive/2008/06/27/2593035.aspx

            亚洲中文字幕无码久久2017| 亚洲AV成人无码久久精品老人| 国内精品久久久久影院优| 亚洲AV无码一区东京热久久 | A狠狠久久蜜臀婷色中文网| 久久99久久99小草精品免视看| 国产精品99久久精品爆乳| 精品多毛少妇人妻AV免费久久| 久久亚洲AV成人无码国产| 久久久久99精品成人片牛牛影视| 无码任你躁久久久久久久| 国产情侣久久久久aⅴ免费| 无码任你躁久久久久久老妇| 国产欧美一区二区久久| 一个色综合久久| 国产69精品久久久久99尤物| 少妇人妻88久久中文字幕| 久久青青国产| 99久久99久久精品国产| 久久国产热精品波多野结衣AV| 日韩久久久久中文字幕人妻 | 伊人久久大香线蕉无码麻豆 | 久久亚洲AV成人出白浆无码国产 | 久久久久久精品免费看SSS| 精品国产一区二区三区久久蜜臀| 亚洲精品乱码久久久久久自慰| 精品久久人人爽天天玩人人妻| 久久精品国产清高在天天线| 久久精品国产亚洲AV久| 丰满少妇人妻久久久久久4| 久久精品国产精品青草| 久久亚洲AV成人无码国产| 无遮挡粉嫩小泬久久久久久久| 狠狠色狠狠色综合久久 | 久久亚洲私人国产精品| 漂亮人妻被中出中文字幕久久 | 99久久久精品免费观看国产| 久久久久久久久波多野高潮| 香蕉久久夜色精品国产尤物| 亚洲欧美精品一区久久中文字幕| 老司机午夜网站国内精品久久久久久久久|