Java Float和C float IEEE754并不匹配

时间:2015-09-20 20:02:43

标签: java c code-translation

我正在阅读文件,用java中的C浮点数写。

myFileRead(bptr, 4, n_row, stream);
for (int i=0;i<n_row;i++)
    ptr.set(i,Float.intBitsToFloat(ByteBuffer.wrap(bptr,i*4,4)
    .order(ByteOrder.LITTLE_ENDIAN).getInt()));

C输出:

input[j]    -0.0922103971   float
wr[j]        0.00706708990  float

Java输出:

input.get(j) = {Float@602} "-0.0922104"
wr.get(j)    = {Float@603} "0.00706709"

Java也给了我这个:

input.get(j).doubleValue() = -0.09221039712429047
wr.get(j).doubleValue() = 0.0070670899003744125

然后我需要将这两个值相乘,并且它不会以两种方式匹配。

(input.get(j) * wr.get(j)) = -6.5165915E-4
(input.get(j).doubleValue() * wr.get(j).doubleValue()) = -6.516591662265869E-4

C输出:

input[j]*wr[j]  -0.000651659153 float

然后错误累积,然后转换为()循环

for(j = 0; j < input_size; j++)
  z += input.get(j) * wr.get(j);
output.set(i, z);

输出是:

 C:    -2.99740553
 Java: -2.7654826641082764

看起来像java Float太短(那么它有多重值?)和Double太长了。如何使Java输出与C输出匹配?

0 个答案:

没有答案