影音先锋男人资源av站_狠狠色综合激情丁香五月_爱爱爱爱看视频_在线播放免费人成视频在线观看_少妇人妻综合久久中文字幕_国产午夜无码精品免费看_久久久久久夜精品精品免费啦_男人女人午夜视频免费_日本xxxx裸体xxxx_丰满人妻熟妇乱又仑精品

電子科大論壇-非清水河畔

 找回密碼
 注冊(cè)(開放注冊(cè))
查看: 8925|回復(fù): 1
打印 上一主題 下一主題

[計(jì)算機(jī)類] Java解惑

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2006-11-29 08:46:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
最近無(wú)意中看到一本有趣的Java書,《Java解惑》。書中用很多小例子展示了Java編程中的一些少見(jiàn)的陷阱和誤區(qū)。建議學(xué)習(xí)Java基礎(chǔ)的同學(xué)可以好好看看這本書。
     舉一個(gè)書中最簡(jiǎn)單的例子,其實(shí)以前很多同學(xué)就問(wèn)過(guò)這個(gè)問(wèn)題,當(dāng)時(shí)已經(jīng)逐個(gè)解釋。又碰到這個(gè)問(wèn)題的同學(xué)可以看看。
     以下程序運(yùn)行結(jié)果是多少。
  
class Testdouble{
public static void main(String[] args) {
  System.out.println(0.3 - 0.1);
}
}
  
大家一看可能覺(jué)得是0.2,這太簡(jiǎn)單了!
實(shí)際上答案是
0.19999999999999998
這是為什么呢,取決于java中小數(shù)的存儲(chǔ)方式,其實(shí)除了java語(yǔ)言,其他語(yǔ)言也有類似問(wèn)題。
大部分小數(shù)在計(jì)算機(jī)中是不精確的。下面引用一片文章:

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    java中的浮點(diǎn)數(shù)采用的事IEEE Standard 754 Floating Point Numbers標(biāo)準(zhǔn),該標(biāo)準(zhǔn)的規(guī)范可以參考http://blog.csdn.net/treeroot/articles/94752.aspx.
      float占用4個(gè)字節(jié),和int是一樣,也就是32bit.
      第1個(gè)bit表示符號(hào),0表示正數(shù),1表示負(fù)數(shù),這個(gè)很好理解,不用多管.
      第2-9個(gè)bit表示指數(shù),一共8為(可以表示0-255),這里的底數(shù)是2,為了同時(shí)表示正數(shù)和負(fù)數(shù),這里要減去127的偏移量.這樣的話范圍就是(-127到128),另外全0和全1作為特殊處理,所以直接表示-126到127.
     剩下的23位表示小數(shù)部分,這里23位表示了24位的數(shù)字,因?yàn)橛幸粋(gè)默認(rèn)的前導(dǎo)1(只有二進(jìn)制才有這個(gè)特性).
     最后結(jié)果是-1)^(sign) * 1.f * 2^(exponent)
     這里:sign是符號(hào)位,f是23bit的小數(shù)部分,exponent是指數(shù)部分,最后表示范圍是(因?yàn)檎?fù)數(shù)是對(duì)稱的,這里只關(guān)心正數(shù))
    2^(-126) ~~ 2(1-2^(-24)) * 2^127
    這個(gè)還不是float的取值范圍,因?yàn)闃?biāo)準(zhǔn)中還規(guī)定了非規(guī)格化表示法,另外還有一些特殊規(guī)定.
   
非規(guī)格化表示:
    當(dāng)指數(shù)部分全0而且小數(shù)部分不全0時(shí)表示的是非規(guī)格化的浮點(diǎn)數(shù),因?yàn)檫@里默認(rèn)沒(méi)有前導(dǎo)1,而是0.
    取值位0.f * 2^(-126),表示范圍位 2^(-149)~~ (1-2^(-23)) * 2^(-126) 這里沒(méi)有考慮符號(hào).這里為什么是-126而不是-127  如果是-127的話,那么最大表示為 2^(-127)-2^(-149),很顯然2^(-127) ~~2^(-126) 就沒(méi)法表示了.


其他特殊表示
    1.當(dāng)指數(shù)部分和小數(shù)部分全為0時(shí),表示0值,有+0和-0之分(符號(hào)位決定),0x00000000表示正0,0x80000000表示負(fù)0.
    2.指數(shù)部分全1,小數(shù)部分全0時(shí),表示無(wú)窮大,有正無(wú)窮和負(fù)無(wú)窮,0x7f800000表示正無(wú)窮,0xff800000表示負(fù)無(wú)窮.
    3.指數(shù)部分全1,小數(shù)部分不全0時(shí),表示NaN,分為QNaN和SNaN,Java中都是NaN.

結(jié)論:
    可以看出浮點(diǎn)數(shù)的取值范圍是:2^(-149)~~(2-2^(-23))*2^127,也就是Float.MIN_VALUE和Float.MAX_VALUE.


。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  
上面文章說(shuō)的float型,對(duì)于double型是類似的情況。
換句話說(shuō),
0.5 在計(jì)算機(jī)中可以用2進(jìn)制精確表示,因?yàn)樗扔?/2
但是0.1 就不能精確表示了,只能用1/16+1/32+....來(lái)逼近,
所以大多數(shù)小數(shù)是不精確的。
  
某些需要高精度運(yùn)算的場(chǎng)合可以用BigDecimal。
2#
發(fā)表于 2006-12-12 05:59:42 | 只看該作者

哦 謝謝啊

本版積分規(guī)則

手機(jī)訪問(wèn)本頁(yè)請(qǐng)
掃描左邊二維碼
本網(wǎng)站聲明
本網(wǎng)站所有內(nèi)容為網(wǎng)友上傳,若存在版權(quán)問(wèn)題或是相關(guān)責(zé)任請(qǐng)聯(lián)系站長(zhǎng)!
站長(zhǎng)電話:0898-66661599    站長(zhǎng)聯(lián)系QQ:12726567   
站長(zhǎng)微信:hainanok
請(qǐng)掃描右邊二維碼
www.myujob.com

小黑屋|手機(jī)版|Archiver|電子科大論壇-非清水河畔 ( 瓊ICP備10001196號(hào)-2 )

GMT+8, 2025-11-7 20:51 , Processed in 0.126675 second(s), 14 queries .

Powered by 校園招聘信息

© 2001-2020 電子科大論壇-非清水河畔校園招聘

快速回復(fù) 返回頂部 返回列表