這篇文章主要講解了“Java中6.6f+1.3f !過程是怎樣的”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java中6.6f+1.3f !過程是怎樣的”吧!
為長海等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及長海網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、網(wǎng)站建設、外貿(mào)網(wǎng)站建設、長海網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
打印結果是:7.8999996。什么個鬼,我的程序難道是個假程序嗎?
我們將 float 改為 double,在執(zhí)行一下。
結果又變了,為:7.8999998569488525。
這是為什么呢?為什么和我預期的不一樣。
要說明這個問題,我們就要從計算機的底層的 0 和 1 說起。計算機只認識 0 和 1,所以所有的計算最終都會轉(zhuǎn)換成二進制的計算。
CPU 表示浮點數(shù)由三部分組成 分為三個部分,符號位(sign),指數(shù)部分(exponent)和有效部分(fraction, mantissa)。 其中 float 總共占用 32 位,符號位,指數(shù)部分,有效部分各占 1 位,8 位,23 位。
對于實數(shù),轉(zhuǎn)化為二進制分為兩部分,第一部分整數(shù)部分,第二部分是小數(shù)部分。整數(shù)部分計算二進制大家都很熟悉。
我們再看一個小數(shù)部分的計算過程。
將小數(shù)乘以2,取整數(shù)部分作為二進制的值,然后再將小數(shù)乘以2,再取整數(shù)部分,以此往復循環(huán)。
你會發(fā)現(xiàn),上面的計算過程會發(fā)生循環(huán),循環(huán)體為 1001。所以 0.6 轉(zhuǎn)化為二進制為 0.10011001…,6.6轉(zhuǎn)化為二進制為 110.10011001… 無限循環(huán)。
那么計算機該如何處理小數(shù)呢?人們是非常聰明的,所以想出了“規(guī)約化”和“指數(shù)偏移值”。
規(guī)約化,就是我們通過規(guī)約化將小數(shù)轉(zhuǎn)為規(guī)約形式,類似我們用的科學計數(shù)法,就是保證小數(shù)點前面有一個有效數(shù)字。
在二進制里面,就是保證整數(shù)位是一個 1。那么 110.10011001 規(guī)約化后就為:1.1010011001*2^2
是指浮點數(shù)中指數(shù)部分的值,它的值為規(guī)約形式的指數(shù)值加上某個固定的值,float 的固定值為 127,計算方法是 2^e-1 其中的 e 為存儲指數(shù)部分的比特位數(shù),前面提到的 float 為 8 位,double 為 11 位。在這里,因為是 2 的 2 次方,偏移值就是 127+2=129,轉(zhuǎn)換為二進制就是 10000001
前面說了,采用二進制科學計數(shù)法計算浮點數(shù)的,有三個部分。符號位,指數(shù)部分,有效部。
6.6 為正數(shù),符號位為 0,指數(shù)部分為偏移值的二進制 10000001,有效部分為規(guī)約形式的小數(shù)部分,為什么只取小數(shù)部分?因為整數(shù)肯定是 1,去掉了不會產(chǎn)生誤差。我們?nèi)ト⌒?shù)的前 23 位即 10100110011001100110011,最后拼接到一起即 01000000110100110011001100110011。 同理,我們可以計算出 1.3 的浮點數(shù)為 00111111101001100110011001100110。
感謝各位的閱讀,以上就是“Java中6.6f+1.3f !過程是怎樣的”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Java中6.6f+1.3f !過程是怎樣的這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!
網(wǎng)頁名稱:Java中6.6f+1.3f!過程是怎樣的
鏈接URL:http://www.rwnh.cn/article12/pgsddc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、手機網(wǎng)站建設、移動網(wǎng)站建設、軟件開發(fā)、品牌網(wǎng)站制作、電子商務
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)