繁体   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