簡體   English   中英

在 java 中處理四倍精度浮點(128 位)數

[英]Handling a quadruple precision floating point (128-bit) number in java

我需要使用來自另一個系統的數字,這些數字是 java 中的 128 位(四倍精度)浮點數。

考慮到java中沒有等效類型,我想使用java代碼降低數字的精度,以便它們可以存儲在java double中。 這可以用 c 或使用匯編很容易地完成,但我想純粹用 java 來完成。

可以公平地假設四倍精度數存儲在 java 中的 128 位字節數組中。

有沒有好的解決方案,只使用java? 謝謝。

我對這個問題很感興趣,以至於我不得不編寫一個庫來處理 IEEE-754 浮點數。 使用庫,您可以使用以下內容:

byte[] quadBytes; // your quad-floating point number in 16 bytes
IEEE754 quad = IEEE754.decode(IEEE754Format.QUADRUPLE, 
        BitUtils.wrapSource(quadBytes));
// IEEE754 holds the number in a 'lossless' format

從那里,您可以:

ByteBuffer doubleBuffer = ByteBuffer.allocateDirect(8);
quad.toBits(IEEE754Format.DOUBLE, BitUtils.wrapSink(doubleBuffer));
doubleBuffer.rewind();
double converted = doubleBuffer.asDoubleBuffer().get();

但上面的代碼片段只是為了說明一般用法……為 double 提供了一個速記:

double converted = quad.doubleValue();

該代碼可在kerbaya.com/ieee754lib 上獲得

根據從導入的String表示實例化的數據集的大小, BigDecimal可能是一個簡單而准確的選項。 我假設可以從任何編程語言導出這些數字的字符串表示。

雖然這個問題是很久以前提出的,但也許有人仍然感興趣。 有一個用於 128 位浮點運算的Java 類該類具有將 128 位 IEEE-754 浮點值轉換為它自己的內部表示而不損失任何精度的方法。 它可以對這些值執行算術運算,並將它們轉換回IEEE-754 binary128以及其他常見的數字類型,如BidDecimaldoublelong 它還可以解析包含此類值的十進制表示的字符串並將它們轉換回字符串。 在內部,它存儲了 128 位的尾數,因此計算的相對誤差不超過 1.47e-39。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM