Decoding single precision bytes
Thiago Macieira
thiago at macieira.org
Fri Nov 7 15:57:34 PST 2014
On Friday 07 November 2014 09:24:44 Linus Torvalds wrote:
> On Nov 7, 2014 8:23 AM, "John Van Ostrand" <john at vanostrand.com> wrote:
> > Are floats portable enough to reference directly, like this:
> >
> > start_cns = *(float *) buf;
>
> Aside from byte ordering and alignment, generally yes. There are some
> random small details like denormals that different architecture might
> handle differently (round to zero etc), but that won't be an issue for any
> dive data.
To avoid the alignment issue, write:
memcpy(&start_cns, buf, sizeof start_cns);
On a platform where alignment is not an issue, the compiler will optimise the
memcpy away and will do exactly what you had written above.
> And in theory other representations than just the standard IEEE one exists,
> but in practice no current hardware uses it, so it's not worth worrying
> about.
And in practice Subsurface does not run on platforms where alignment is an
issue either, especially not desktop Subsurface. I think the both Android and
iOS put their ARM processors in unaligned mode, allowing unaligned loads, but
it would be nice to get confirmation.
--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Software Architect - Intel Open Source Technology Center
PGP/GPG: 0x6EF45358; fingerprint:
E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358
More information about the subsurface
mailing list