Java中的浮點數(shù)分析
文章來源:csdn 作者:treeroot
浮點數(shù)分為單精度和雙精度,Java中的單精度和雙精度分別為float和double.你們知道float和double是怎么存儲的嗎?
float占4個字節(jié),double占8個字節(jié),為了方便起見,這里就只討論float類型.
float其實和一個int型的大小是一樣的,一共32位,第一位表示符號,2-9表示指數(shù),后面23位表示小數(shù)部分.這里不多說,請參考:http://blog.csdn.net/treeroot/archive/2004/09/05/95071.aspx
這里只舉一個例子,希望能拋磚引玉,就是研究一下浮點數(shù)0.1的存儲形式,先運行這個程序.
public class Test{ public static void main(String[] args) { int x = 0x3d800000; int i = 1 << 22; int j = 1 << 4; float f = 0.1f; int y = Float.floatToIntBits(f); float rest = f - ( (float) 1) / j; while (i > 0) { static void pr(int i) { } |
結果:
111101110011001100110011001101
111101110011001100110011001101
程序說明:
int x=0x3d80000;
因為浮點表示形式為1.f*2n-127我們要表示0.1,可以知道n-127=-4,到n=123
符號為正,可知前9是 001111011,暫時不考慮后面的23位小數(shù),所以我們先假設x=0x3d800000;
int i = 1 << 22; |
int j = 1 << 4; |
i初始為4,因為n-127為-4,這里是為了求它的倒數(shù).
float f = 0.1f; int y = Float.floatToIntBits(f); |
y就是它的32位表示
float rest = f - ( (float) 1) / j; |
這個rest表示除了1.f中的1剩下的,也就是0.f
while (i > 0) { j <<= 1; float deta = ( (float) 1) / j; if (rest >= deta) { rest -= deta; x |= i; } i >>= 1; } |
這個循環(huán)來計算23位小數(shù)部分,如果rest不小于deta,表示這個位可以置為1.
其他的不多說了,輸入結果是一樣的,可以說0.1這個浮點數(shù)肯定是不精確的,但是0.5可以精確的表示,想想為什么吧
上一篇:Toolbar制作菜單條過程詳解
欄 目:Java編程
下一篇:Java Socket編程(四) 重復和并發(fā)服務器
本文標題:Java中的浮點數(shù)分析
本文地址:http://mengdiqiu.com.cn/a1/Javabiancheng/8554.html
您可能感興趣的文章
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10Java Socket編程(三) 服務器Sockets
- 01-10Java進階:Struts多模塊的技巧
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java運行時多態(tài)性的實現(xiàn)
- 01-10Java經(jīng)驗點滴:處理沒有被捕獲的異常
- 01-10Java Socket編程(四) 重復和并發(fā)服務器
- 01-10面向?qū)ο缶幊?Java中的抽象數(shù)據(jù)類型
- 01-10跟我學Java Swing之游戲設計(2)


閱讀排行
本欄相關
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10JVM的垃圾回收機制詳解和調(diào)優(yōu)
- 01-10Java Socket編程(三) 服務器Sockets
- 01-10Java進階:Struts多模塊的技巧
- 01-10J2SE 1.5版本的新特性一覽
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java運行時多態(tài)性的實現(xiàn)
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java Socket編程(四) 重復和并發(fā)服務
- 01-10Java經(jīng)驗點滴:處理沒有被捕獲的異常
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10C#中split用法實例總結