java - 在 Java 中处理四倍精度 float (128 位)

标签 java floating-point-conversion

我需要在 java 中使用来自另一个系统的 128 位(四倍精度) float 。

考虑到 java 中没有等效类型,我想使用 java 代码降低数字的精度,以便它们可以存储在 java double 中。这可以在 c 或使用汇编中相当容易地完成,但我想纯粹在 java 中完成。

假设四精度数存储在 java 中的 128 位字节数组中是公平的。

是否有一个好的解决方案,只使用 java?谢谢。

最佳答案

我对这个问题很感兴趣,因此不得不编写一个库来处理 IEEE-754 float 。通过该库,您可以使用以下内容:

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 获得.

关于java - 在 Java 中处理四倍精度 float (128 位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051287/

相关文章:

java - 设置和更新 AlertDialog 的自定义 View

java - Vaadin 8 带标签和按钮的水平布局

java - 一个主题的多个订阅者。有订阅时打开,否则关闭

c - 关于 float 和 float ×整数的溢出题

image - 用浮点值写入图像

c - c中带 float 的模数

java - 使用 java 8 流计算单次传递的多个项目

java - 使用 JAXB 解析具有更多子元素的 XML

c - 为什么在不需要时费心使用 float / double 文字?

将 float 转换为 char*