信息表示和处理 from computer system chapter 2
1、整數(shù)的表示 大部分(所有?)機器 有符號數(shù)是補碼表示。
?
2、整數(shù)的運算。+ -就是+-,按位加減,注意有符號和無符號的數(shù)值溢出,*/ 可以轉(zhuǎn)換成移位等 同樣是有位的截斷,可以先十進制計算換成2進制再截斷。
?
3、實際上是一種模運算,注意字長導致截斷。
?
4、浮點數(shù)的表示:
單精度為例:32位,1位的符號位,8位指數(shù)位(無符號 書上說的實際值是他-127即范圍是-127-128,網(wǎng)上是錯的-128-127),23位的尾數(shù),因為尾數(shù)小數(shù)點前是1,所以省略,計算時加1.
無窮和除 NaN 以外的其它浮點數(shù)一樣是有序的,從小到大依次為負無窮,負的有窮非零值,正負零(隨后介紹),正的有窮非零值以及正無窮。除 NaN 以外的任何非零值除以零,結(jié)果都將是無窮,而符號則由作為除數(shù)的零的符號決定。
回顧我們對 NaN 的介紹,當零除以零時得到的結(jié)果不是無窮而是 NaN 。原因不難理解,當除數(shù)和被除數(shù)都逼近于零時,其商可能為任何值,所以 IEEE 標準決定此時用 NaN 作為商比較合適。
?
5、特殊值:我們已經(jīng)知道,指數(shù)域?qū)嶋H可以表達的指數(shù)值的范圍為 -127 到 128 之間(包含兩端)。其中,值 -127(保存為 全 0)以及 +128(保存為全 1)保留用作特殊值的處理。
?
6、非規(guī)范化數(shù)
我們來考察浮點數(shù)的一個特殊情況。選擇兩個絕對值極小的浮點數(shù),以單精度的二進制浮點數(shù)為例,比如 1.001 × 2-125?和 1.0001 × 2-125?這兩個數(shù)(分別對應于十進制的 2.6448623 × 10-38?和 2.4979255 × 10-38)。顯然,他們都是普通的浮點數(shù)(指數(shù)為 -125,大于允許的最小值 -126;尾數(shù)更沒問題),按照 IEEE 754 可以分別保存為 00000001000100000000000000000000(0x1100000)和 00000001000010000000000000000000(0x1080000)。
現(xiàn)在我們看看這兩個浮點數(shù)的差值。不難得出,該差值為 0.0001 × 2-125,表達為規(guī)范浮點數(shù)則為 1.0 × 2-129。問題在于其指數(shù)大于允許的最小指數(shù)值,所以無法保存為規(guī)范浮點數(shù)。最終,只能近似為零(Flush to Zero)。這中特殊情況意味著下面本來十分可靠的代碼也可能出現(xiàn)問題:
if (x != y) {z = 1 / (x -y);
}
正如我們精心選擇的兩個浮點數(shù)展現(xiàn)的問題一樣,即使 x 不等于 y,x 和 y 的差值仍然可能絕對值過小,而近似為零,導致除以 0 的情況發(fā)生。
為了解決此類問題,IEEE 標準中引入了非規(guī)范(Denormalized)浮點數(shù)。規(guī)定當浮點數(shù)的指數(shù)為允許的最小指數(shù)值,即?emin?時,尾數(shù)不必是規(guī)范化的。比如上面例子中的差值可以表達為非規(guī)范的浮點數(shù) 0.001 × 2-126,其中指數(shù) -126 等于?emin。注意,這里規(guī)定的是"不必",這也就意味著"可以"。當浮點數(shù)實際的指數(shù)為?emin,且指數(shù)域也為?emin?時,該浮點數(shù)仍是規(guī)范的,也就是說,保存時隱含著一個隱藏的尾數(shù)位。為了保存非規(guī)范浮點數(shù),IEEE 標準采用了類似處理特殊值零時所采用的辦法,即用特殊的指數(shù)域值?emin?- 1 加以標記,當然,此時的尾數(shù)域不能為零。這樣,例子中的差值可以保存為 00000000000100000000000000000000(0x100000),沒有隱含的尾數(shù)位。
?
7、有符號的零
因為 IEEE 標準的浮點數(shù)格式中,小數(shù)點左側(cè)的 1 是隱藏的,而零顯然需要尾數(shù)必須是零。所以,零也就無法直接用這種格式表達而只能特殊處理。
實際上,零保存為尾數(shù)域為全為 0,指數(shù)域為?emin?- 1 = -127,也就是說指數(shù)域也全為 0。考慮到符號域的作用,所以存在著兩個零,即 +0 和 -0。不同于正負無窮之間是有序的,IEEE 標準規(guī)定正負零是相等的。
零有正負之分,的確非常容易讓人困惑。這一點是基于數(shù)值分析的多種考慮,經(jīng)利弊權(quán)衡后形成的結(jié)果。有符號的零可以避免運算中,特別是涉及無窮的運算中,符號信息的丟失。舉例而言,如果零無符號,則等式 1/(1/x) = x 當x = ±∞ 時不再成立。原因是如果零無符號,1 和正負無窮的比值為同一個零,然后 1 與 0 的比值為正無窮,符號沒有了。解決這個問題,除非無窮也沒有符號。但是無窮的符號表達了上溢發(fā)生在數(shù)軸的哪一側(cè),這個信息顯然是不能不要的。零有符號也造成了其它問題,比如當 x=y 時,等式1/x = 1/y 在 x 和 y 分別為 +0 和 -0 時,兩端分別為正無窮和負無窮而不再成立。當然,解決這個問題的另一個思路是和無窮一樣,規(guī)定零也是有序的。但是,如果零是有序的,則即使?if (x==0)?這樣簡單的判斷也由于 x 可能是 ±0 而變得不確定了。兩害取其輕者,零還是無序的好。
?
8、NaN
NaN 用于處理計算中出現(xiàn)的錯誤情況,比如 0.0 除以 0.0 或者求負數(shù)的平方根。對于單精度浮點數(shù),NaN 表示為指數(shù)為?emax?+ 1 = 128(指數(shù)域全為 1),且尾數(shù)域不等于零的浮點數(shù)。IEEE 標準沒有要求具體的尾數(shù)域,所以 NaN 實際上不是一個,而是一族。
?
9、無窮
和 NaN 一樣,特殊值無窮(Infinity)的指數(shù)部分同樣為?emax?+ 1 = 128,不過無窮的尾數(shù)域必須為零。無窮用于表達計算中產(chǎn)生的上溢(Overflow)問題。比如兩個極大的數(shù)相乘時,盡管兩個操作數(shù)本身可以用保存為浮點數(shù),但其結(jié)果可能大到無法保存為浮點數(shù),而必須進行舍入。根據(jù) IEEE 標準,此時不是將結(jié)果舍入為可以保存的最大的浮點數(shù)(因為這個數(shù)可能離實際的結(jié)果相差太遠而毫無意義),而是將其舍入為無窮。對于負數(shù)結(jié)果也是如此,只不過此時舍入為負無窮,也就是說符號域為 1 的無窮。
?
?10、尾數(shù)域為不全為 0?emin?- 1 = -127,指數(shù)域全為 0,不存在,因為可以用非規(guī)范的表示。 ???我的理解。
?
11、浮點數(shù)的計算:這種運算通常伴隨著因為無法精確表示而進行的近似或舍入。
?
+-:兩浮點數(shù)進行加法和減法的運算規(guī)則是 設 Ex小于等于Ey,則 x±y = (Mx*2^(Ex-Ey)±My)*2^Ey, ?舍入處理?
?http://blog.csdn.net/b2b160/article/details/4492519
http://www.cnblogs.com/kingwolfofsky/archive/2011/07/21/2112299.html
http://baike.baidu.com/view/339796.htm
?
轉(zhuǎn)載于:https://www.cnblogs.com/wocgcow/p/5854823.html
總結(jié)
以上是生活随笔為你收集整理的信息表示和处理 from computer system chapter 2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow学习笔记五:mnis
- 下一篇: 转: Linux下使用java -jar