亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

4字節(±3.40282347E + 38)的浮點范圍如何

4字節(±3.40282347E + 38)的浮點范圍如何

冉冉說 2023-06-04 16:51:24
和int類型在 java 中float都是4 個字節。那么如何int表示一個范圍 just -2,147,483,648to 2,147,483,647where floathas approximately±3.40282347E+38F而兩者都具有相同的有限字節數?根據我的理解,兩者應該具有相同的范圍,因為它們具有相同的字節數。有人可以解釋一下如何float表示這么大的范圍嗎?
查看完整描述

1 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

“浮動”點意味著您的數字的小數部分的位數可以更改以“盡可能最好地”表示您的數字,因為它的大小有限制。

讓我們暫時忘記float數據類型的 4 個字節,并假設您的“浮點數”類型最多可以存儲 10 位數字加上負號。-9 999 999 999這意味著您可以準確地表示從 :到 的數字+9 999 999 999。-999 999 999.9但是,如果你想要一位小數,你可以準確地表示從到 的數字+999 999 999.9。如您所見,范圍已有效更改。

現在,讓我們通過討論有效數和指數來正式說明一下:

  • 有效數字包含您的有效數字

  • 指數表示 10 乘數的指數,或者,如果它更容易,則表示您必須將小數點移動多少個位置(0 剛好在第一個有效數字之前)。

假設您的“浮點數”數據類型的有效數最多可以有 4 位,指數也最多可以有 1 位,再加上significand和exponent中的減號。您將能夠表示從-0.9 999 * 10^9 = -999900000到 的數字+0.999 9 * 10^9 = +999900000。正如您所看到的,雖然數字非常大,但您無法準確表示大多數大數字,因為您只有 4 位數字可用于表示。這種精度損失可以通過表示非常小的數字的能力來補償,例如您可以表示0.999 9 * 10^-9 = 0.000 000 000 999 9.

這解釋了為什么盡管大小只有 4 個字節但范圍如此之大,如您的問題所述。


為了完善您對此事的了解,請將上述概念轉化為二進制(您的典型float使用 4 位表示指數,23 位表示有效數,1 位表示有效數的符號)。

維基百科是一個很好的起點。通常,編程目的的主要收獲是了解給定數據類型(您的“精度”)可以存儲多少個小數位,因為這將決定哪種特定的小數格式最適合您的目的。

請注意,理解二進制系統中浮點數的概念在信息技術中非常重要,因為即使是最簡單的計算也會受到它的嚴重影響。

在計算機(二進制)上表示的浮點數是例如編寫如下內容的原因:

public class MyClass {

? ? public static void main(String args[]) {

? ? ? double x=0.1f;

? ? ? double y=0.2f;

? ? ? double z=0.3f;


? ? ? if(x+y == z) {

? ? ? ? ? System.out.println("something");

? ? ? }

? ? ? else {

? ? ? ? ? System.out.println("something else");

? ? ? }

? ? }

}

將反直覺輸出something else,但如果您開始玩數字或將類型更改為浮點數,它將產生正確的輸出。


所以請注意:您需要完全理解這個概念。


查看完整回答
反對 回復 2023-06-04
  • 1 回答
  • 0 關注
  • 355 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號