日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浮点型数据存储格式详解

發(fā)布時(shí)間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浮点型数据存储格式详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文是對 Computer Systems__A Programmer's Perspective 一書中 Chapter2__2.4 Floating Point一節(jié)的理解

1985年之前,每個(gè)pc制造商都有自己的浮點(diǎn)數(shù)表示和計(jì)算方法。那時(shí)更讓人關(guān)心的是浮點(diǎn)數(shù)的計(jì)算速度和實(shí)現(xiàn)方法而非數(shù)值和計(jì)算的精度。在1985年,IEEE標(biāo)準(zhǔn)進(jìn)行了統(tǒng)一,提升了程序的可移植性。

生活中常用的是10進(jìn)制表示的數(shù)值,dmdm-1…d1d0.d-1d-2…d-n表示如下:

d0d-1間的小數(shù)點(diǎn)“.”,表示該符號左邊的數(shù)值10的指數(shù)是正數(shù),右邊的數(shù)值10的指數(shù)是負(fù)數(shù)。

同理,考慮一個(gè)2進(jìn)制表示的數(shù)值,bmbm-1…b1b0.b-1b-2…b-n表示如下:

其中,bi只能是01。同時(shí),小數(shù)點(diǎn)“.”符號左邊的數(shù)值2的指數(shù)是正數(shù),右邊的數(shù)值2的指數(shù)是負(fù)數(shù)。比如,101.112表示1*2^2+ 0*2^1 + 1*2^0 + 1*2^-1 + 1*2^-2 = 4 + 0 +1 + 1/2 + 1/4 = 5 + 3/4

通過2進(jìn)制數(shù)值的表示方式,可知將小數(shù)點(diǎn)符號“.”向左或向右移位,分別表示原有數(shù)值除2或乘210.1112的數(shù)值是2 + 7/81011.12表示11 + 1/2

數(shù)值的X進(jìn)制的編碼不可能是無限長的,因此一些數(shù)值受限于編碼長度只能近似表示而不能完全精確。如1/35/710進(jìn)制在編碼長度一定時(shí),就不能完全精確表達(dá)該數(shù)值;1/52進(jìn)制表示下只能通過增加編碼長度無限逼近該值。這就是浮點(diǎn)數(shù)精度產(chǎn)生的原因:在計(jì)算機(jī)中,因?yàn)?/span>2進(jìn)制編碼長度的限制,浮點(diǎn)數(shù)中小數(shù)點(diǎn)后的部分?jǐn)?shù)值因?yàn)椴荒鼙硎径粊G棄。基于這個(gè)原因,就可以理解浮點(diǎn)數(shù)比較為什么不和整形數(shù)值之間的比較一樣,直接用“<”、“>”、“==”等運(yùn)算符得到數(shù)值間的大小,而一定要用if (a-b<0.000001)條件來判斷了。

?

IEEE標(biāo)準(zhǔn)中的的浮點(diǎn)數(shù)表示形式為V = (-1)s * M * 2E

S—符號位,s0時(shí),浮點(diǎn)數(shù)大于0s1時(shí),浮點(diǎn)數(shù)小于0。當(dāng)浮點(diǎn)數(shù)為0.0時(shí),s當(dāng)作特殊情況處理,具體請看下面說明

E—指數(shù)位,2的指數(shù)數(shù)值

M—數(shù)值位,小數(shù)的2進(jìn)制數(shù)值,范圍為0—11—2

對應(yīng)浮點(diǎn)數(shù)的表示形式,浮點(diǎn)數(shù)的bits分為三部分:

S—符號位,占用1 bit

E—指數(shù)位,占用k bitsexp = ek-1…e1e0

M—數(shù)值位,占用n bitsfrac = fn-1…f1f0M的解譯取決于E是否為0

32 bits的單精度浮點(diǎn)數(shù)(C語言中的float型)中skn分別為1823 64 bits的雙精度浮點(diǎn)數(shù)(C語言中的double型)中skn分別為11152

浮點(diǎn)數(shù)的解譯依據(jù)E的不同,分為三種情況:

Normalized values常規(guī)數(shù)值:

E中的bit位不全為0,也不全為1,大部分浮點(diǎn)數(shù)屬于這此類。這種情況下Ebiased form(偏差形式)解譯為signed integerBiased form為:

E = e – Bias

eexp = ek-1…e1e0unsigned numberBias是偏差值,計(jì)算方式為Bias = 2k-1-1(單精度為127,雙精度為1023)。E的范圍是單精度為-126—+127,雙精度為-1022—+1023

M數(shù)值占用的n bit被解譯為2進(jìn)制的小數(shù)f0 ?<= ?f ?< 1),即0. fn-1…f1f0M = 1 + f,可以把M看作為2進(jìn)制的1. fn-1…f1f0。在V = (-1)s * M * 2E表示形式中,可以調(diào)整E的大小保證1 <= M < 2,所以2進(jìn)制的1. fn-1…f1f01可以去掉,增加小數(shù)部分的值用以提升數(shù)據(jù)精度。

Denormalized values非常規(guī)數(shù)值:

E中的bit為全為0Edenormalized form(非常規(guī)形式)解讀。Denormalized form為:

E = 1 – BiasM = f

非常規(guī)數(shù)值有兩種用途:第一,可以表示0.0。在常規(guī)數(shù)值中,M始終是>=1的,不可能產(chǎn)生0.0+0.0時(shí),所有的bit值都是0,即符號位s0Ebit0M=f=0。當(dāng)-0.0時(shí),符號位s1,其他的bit都是0。在IEEE浮點(diǎn)數(shù)格式中,-0.0+0.0是否相同取決于應(yīng)用場景。第二,可以表示接近0.0的數(shù)值。

Special Values特殊值:

當(dāng)E中的bits全部為1時(shí),Mbits全部為0時(shí),表示無窮大,s=0時(shí)為正無窮+oos=1時(shí)為-oo。無窮可以表示數(shù)值的溢出,如兩個(gè)很大的數(shù)相乘,或者除0;當(dāng)M中的bit不全為0時(shí),表示為NaN(Not a Number),即不是一個(gè)數(shù)。當(dāng)操作的結(jié)果不能作為實(shí)數(shù)或者無窮返回時(shí),就返回NaN,如計(jì)算或者oo-ooNaN在某些應(yīng)用中可以用來表示未初始化的值。

IEEE Floating-Point總結(jié)為下圖

轉(zhuǎn)載于:https://www.cnblogs.com/Taiwantomzhang/p/3618542.html

總結(jié)

以上是生活随笔為你收集整理的浮点型数据存储格式详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。