![](/img/trans.png)
[英]How to convert Java double to byte[], and byte[] to double (IEEE 754 double-precision binary floating-point format)
[英]How accurate is “double-precision floating-point format”?
假設使用Java輸入
雙數
如果我需要使用非常大或非常小的值,它們的精度如何? 我試圖閱讀雙打和浮球的工作原理,但我並沒有真正理解它。
對於我的編程入門學期項目,我可能需要使用具有較大價值范圍(多個數量級)的不同數字。
假設我創建了一個while循環,
while (number[i-1] - number[i] > ERROR) {
//does stuff
}
ERROR的限制是否取決於number [i]的大小? 如果是這樣,我如何確定ERROR可以減小多少以退出循環?
我知道我的老師在某個時候解釋過它,但是我似乎在筆記中找不到它。
ERROR的限制是否取決於number [i]的大小?
是。
如果是這樣,我如何確定ERROR可以減小多少以退出循環?
您可以使用Math.nextUp
獲得“下一個最大”的雙Math.nextUp
(或使用Math.nextUp
獲得“下一個最小的” Math.nextDown
),例如
double nextLargest = Math.nextUp(number[i-1]);
double difference = nextLargest - number[i-1];
正如Radiodef指出的那樣,您還可以使用Math.ulp
直接獲得差異:
double difference = Math.ulp(number[i-1]);
(但我認為“下一個最小”沒有等效的方法)
如果您不告訴我們您想使用它什么,那么我們只能回答標准知識:Java中的double
大約有16位有效數字(即十進制數字系統的數字),並且最小可能的值為4.9 x 10 -324 。 這完全有可能比您需要的精度更高。
問題中的epsilon值(您稱為“錯誤”)根據您的計算而有所不同,因此沒有標准答案,但是如果您對簡單的東西使用double而不是對科學要求很高的東西,則使用類似1 x 10 -9 ,您會沒事的。
float和double基本類型在它們可以存儲的數據量方面都受到限制。 但是,如果您想知道這兩種類型的最大值,請使用自己喜歡的IDE運行以下代碼。
System.out.println(Float.MAX_VALUE);
System.out.println(Double.MAX_VALUE);
double
數據類型是雙精度64位IEEE 754浮點(精度位數可以在15到17個十進制數字之間)。 float
數據類型是單精度32位IEEE 754浮點(精度數字可以在6到9個十進制數字之間)。 運行上面的代碼后,如果您對它們的范圍不滿意,那么我建議您使用BigDecimal,因為這種類型沒有限制(而是您的RAM是限制)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.