我需要在 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/