Numerical error on native float access
Ulf Zibis
Ulf.Zibis at gmx.de
Tue Apr 20 05:12:34 PDT 2010
Am 20.04.2010 09:02, schrieb Martin Buchholz:
> On Sat, Apr 17, 2010 at 15:37, Ulf Zibis<Ulf.Zibis at gmx.de> wrote:
>
>> There seems to be a bug in Float.intBitsToFloat(int) and/or
>> Float.floatToRawIntBits(float) and/or sun.misc.Unsafe.getInt/Float.
>>
>> If I replace
>> return
>> Float.intBitsToFloat(Integer.reverseBytes(unsafe.getInt(offset)));
>> with
>> return reverseBytes(unsafe.getFloat(offset));
>>
> It looks like you are accessing a float value using getInt,
>
Contrary, DirectFloat/DoubleBufferS#get/put() currently use get/putInt/Long.
My attempt is, to avoid this by shifting the swap mechanics to Unsafe class.
> which is breaking the rules.
>
> In any case, swapping bytes of floating point values is
> something no one is likely to care about.
> At least, I'm finding it hard to care.
Sounds not good.
I think we need a native byte swapping for float/double types to ensure
correctness on little-endian machines for
DirectFloat/DoubleBufferS#get/put().
What you think?
-Ulf
More information about the nio-dev
mailing list