在java中处理四精度浮点数(128位)

2023-11-23

我需要利用来自另一个系统的数字,这些数字是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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在java中处理四精度浮点数(128位) 的相关文章

随机推荐