日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Java中的浮點型與雙精度型(Float vs Double)

來源: 責編: 時間:2023-12-11 09:25:56 260觀看
導讀編程語言中的數據類型對數據進行分類并表示特定類別中的數據,該類別確定可以存儲在變量中的值的類型。不同的編程語言提供不同的,包括整數、浮點數、字符、字符串和布爾值。在本篇文章中,我們將重點關注 float 和 double

5qv28資訊網——每日最新資訊28at.com

編程語言中的數據類型對數據進行分類并表示特定類別中的數據,該類別確定可以存儲在變量中的值的類型。不同的編程語言提供不同的,包括整數、浮點數、字符、字符串和布爾值。5qv28資訊網——每日最新資訊28at.com

在本篇文章中,我們將重點關注 float 和 double 之間的差異。5qv28資訊網——每日最新資訊28at.com

float 和 double 之間的區別在于它們的精度。Float 是 32 位單精度浮點類型,而 double 是 64 位雙精度浮點類型。5qv28資訊網——每日最新資訊28at.com

然而,關于這些數據類型還有更多需要了解,例如它們是如何存儲的?他們的用例是什么?更重要的是,Java 中的 float 和 double 有什么區別嗎?5qv28資訊網——每日最新資訊28at.com

浮點數的兩種表示形式

二進制系統中的數字由三部分組成:5qv28資訊網——每日最新資訊28at.com

  • 符號:表示數字是正數還是負數。通常用一個位來表示,00表示積極和11表示負數。
  • 整數:表示小數點前出現的整數。
  • 分數:表示小數點后出現的分數。

5qv28資訊網——每日最新資訊28at.com

二進制系統中數字的表示5qv28資訊網——每日最新資訊28at.com

二進制數的定點表示對整數和小數部分使用固定位數。雖然方便,但定點表示的精度有限,并且取決于分配給小數部分的位數。5qv28資訊網——每日最新資訊28at.com

以一個16位的3.1416為例,我們用7位表示整數,用8位表示小數點后的小數。剩余的1位保留給符號位。5qv28資訊網——每日最新資訊28at.com

  • 符號位將是00因為數字是正數。
  • 整數3轉換為二進制為00000110000011。
  • 分數0.1416轉換為二進制為0010010000100100。

另一種方法可以是固定數字的位數和另一組位以指示小數點在該數字內的位置。這稱為浮點表示。我們將沒有小數點的數字稱為尾數,將小數點的位置稱為指數。浮點表示對于數值范圍較大且精度要求較高的應用非常有利。5qv28資訊網——每日最新資訊28at.com

5qv28資訊網——每日最新資訊28at.com

浮點表示5qv28資訊網——每日最新資訊28at.com

我們繼續前面的例子,看看如何3.1416以 16 位浮點表示形式表示??紤]到10尾數位和5對于指數,符號位將為s=0因為數字是正數。對于尾數,我們從相當于的二進制開始3.1416=11.00100100,可以寫成11.00100100×2^1。現在尾數將是1100100100,指數是二進制表示1=00001。5qv28資訊網——每日最新資訊28at.com

Java 中的float與double

理解了浮點表示的概念后,區分 float 和 double 就變得很容易了。正如前面所述,float 和 double 之間的主要區別在于它們的精度。5qv28資訊網——每日最新資訊28at.com

根據 IEEE 754 標準,float是 32 位二進制格式,而double是 64 位二進制格式。下表總結了指數和尾數所用位數的差異:5qv28資訊網——每日最新資訊28at.com


5qv28資訊網——每日最新資訊28at.com

Float5qv28資訊網——每日最新資訊28at.com

Double5qv28資訊網——每日最新資訊28at.com

符號5qv28資訊網——每日最新資訊28at.com

15qv28資訊網——每日最新資訊28at.com

15qv28資訊網——每日最新資訊28at.com

指數5qv28資訊網——每日最新資訊28at.com

85qv28資訊網——每日最新資訊28at.com

115qv28資訊網——每日最新資訊28at.com

尾數5qv28資訊網——每日最新資訊28at.com

235qv28資訊網——每日最新資訊28at.com

525qv28資訊網——每日最新資訊28at.com

全部5qv28資訊網——每日最新資訊28at.com

325qv28資訊網——每日最新資訊28at.com

645qv28資訊網——每日最新資訊28at.com

5qv28資訊網——每日最新資訊28at.com

現在我們知道了 float 和 double 中的位分布,我們可以確定數據類型的范圍——可以存儲的最大值和最小值。5qv28資訊網——每日最新資訊28at.com

  • float 可以存儲大約范圍為:±1.5×10^-45到±3.4×10^38(大約6-7位的有效數字)。
  • double 可以存儲大約范圍為:±5×10^-324到±1.7×10^308(大約15位的有效數字)。

應用領域比較

Float

一般來說,精度要求較低、受處理能力限制或受存儲限制的應用程序適合使用 float 而不是 double。這些應用程序的一些常見示例如下:5qv28資訊網——每日最新資訊28at.com

  • 移動設備:移動設備的存儲空間通常有限,因此浮動成為顯而易見的選擇。與 double 相比,Float 需要更少的內存并且處理能力更高效。
  • 時間關鍵型系統:時間關鍵型系統通常受到延遲的限制,這使得它們成為使用浮動的明顯用例。一個典型的例子是自動駕駛汽車,其中更快的處理速度和低處理延遲至關重要。請注意,使用浮點將使處理速度更快,但會犧牲精度。
  • 圖形和音頻處理:由于浮點精度較低,因此它也適用于圖形和音頻處理——它可以提供足夠精度的應用程序。

Double

由于 double 提供了更高的精度,因此與 float 相比,用例是不同的。以下是一些適合使用雙精度而不是浮點的示例:5qv28資訊網——每日最新資訊28at.com

  • 財務計算:由于精度是這里的關鍵,因此在財務計算中優選使用 double 以避免舍入誤差。
  • 科學計算: double 的另一個用例是需要準確性的科學計算。示例包括物理模擬、統計模擬、氣候建模等。
  • 防御系統:防御系統是精度至關重要的重要應用。這是因為在導彈制導系統等防御系統中,表示坐標至關重要,并且會顯著影響結果的準確性。

下圖簡要總結了如何在浮點型和雙精度型之間進行選擇。衡量底層應用程序的要求進行選擇。5qv28資訊網——每日最新資訊28at.com

5qv28資訊網——每日最新資訊28at.com

具有精度、延遲和存能力的蜘蛛圖5qv28資訊網——每日最新資訊28at.com

舍入誤差

浮點數的算術運算并不精確,可能會導致舍入錯誤。這些舍入誤差會隨著時間的推移而累積,從而導致意外的結果。5qv28資訊網——每日最新資訊28at.com

讓我們來看一個簡單的例子,在Java中 fractinotallow=1/10 加十次。理想情況下,它應該導致1. 我們來看看浮點運算是如何計算的。5qv28資訊網——每日最新資訊28at.com

public class Main {    public static void main(String[] args) {        float exp_result = 1.0f;        float fraction = 1.0f / 10.0f;        System.out.println();        float sum = 0.0f;        for (int i = 0; i < 10; i++) {            sum += fraction;        }        System.out.println("預期結果: " + exp_result);        System.out.println("實際總和: " + sum);        if (exp_result == sum)            System.out.println("預期結果等于計算結果");        else            System.out.println("預期結果不等于計算結果");    }}

算術運算中的舍入誤差示例5qv28資訊網——每日最新資訊28at.com

在這里,我們在第 3-4 行f附加或F到值以聲明浮點數。我們在第 4 行定義一個fraction并在for循環中將sum添加到第 9-11 行的變量fraction十次。最后,第 16-19 行比較了預期結果和實際結果。5qv28資訊網——每日最新資訊28at.com

5qv28資訊網——每日最新資訊28at.com

運行結果5qv28資訊網——每日最新資訊28at.com

注意:即使我們將第 3-4 行的變量類型從 float 更改為 double,輸出也不會改變。5qv28資訊網——每日最新資訊28at.com

輸出顯示實際結果與預期結果不同。這是因為舍入誤差隨著時間的推移而累積。5qv28資訊網——每日最新資訊28at.com

公差使用

使用浮點數時,使用適當的公差值比精確更重要。這可以避免在比較浮點數時出現意外結果。公差的選擇取決于應用和所需的精度。讓我們看看如何在示例中使用公差值。5qv28資訊網——每日最新資訊28at.com

public class Main {    public static void main(String[] args) {        float exp_result = 1.0f;        float fraction = 1.0f / 10.0f;        float tolerance = 0.000001f;        System.out.println();        float sum = 0.0f;        for (int i = 0; i < 10; i++) {            sum += fraction;        }        System.out.println("預期結果: " + exp_result);        System.out.println("實際總和 : " + sum);        if (Math.abs(exp_result - sum) < tolerance)            System.out.println("預期結果等于計算結果");        else            System.out.println("預期結果不等于計算結果");    }}

比較兩個浮點數與容差的示例5qv28資訊網——每日最新資訊28at.com

在這里,我們在第 5 行定義了一個變量tolerance來比較第 17 行實際結果和預期結果之間的絕對差異?,F在輸出符合預期。5qv28資訊網——每日最新資訊28at.com

5qv28資訊網——每日最新資訊28at.com

總結

在Java中,"float"和"double"是用于表示浮點數的兩種數據類型。它們用于存儲具有小數部分的數值,區別在于精度和存儲空間。5qv28資訊網——每日最新資訊28at.com

  • 精度:double類型提供更高的精度,因為它具有更多的有效數字位數。這使得它在需要更高精度的計算和存儲要求較高的場景中更加適用。
  • 存儲空間:float類型占用32位的存儲空間,而double類型占用64位的存儲空間。這意味著double類型需要更多的內存來存儲數值,但也提供了更大的范圍和精度。

在選擇使用float還是double時,需要根據具體需求和性能要求進行權衡。通常情況下,如果需要更高的精度或處理較大的數值范圍,建議使用double類型。然而,如果內存占用是一個關鍵因素,或者對精度要求不是特別高,可以考慮使用float類型以節省內存空間。5qv28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-41680-0.htmlJava中的浮點型與雙精度型(Float vs Double)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 2023 年 CSS 新特性大盤點

下一篇: Go語言 字符串拼接方式與性能比較,分析過沒?

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 临沭县| 车致| 婺源县| 新津县| 苍南县| 东莞市| 长宁县| 象州县| 盐边县| 孝昌县| 海伦市| 松江区| 缙云县| 岳普湖县| 贵定县| 邛崃市| 社旗县| 孟津县| 汉源县| 察隅县| 苗栗县| 阿克苏市| 敖汉旗| 乐至县| 绥芬河市| 山阴县| 西乌| 香河县| 登封市| 监利县| 玉山县| 二连浩特市| 清水县| 双辽市| 永靖县| 伽师县| 龙胜| 临洮县| 军事| 禹城市| 曲沃县|