Representation of 128 bit floating point numbers in FreeBSD amd64 and Clang
Bruce Evans
brde at optusnet.com.au
Thu Oct 31 21:38:36 UTC 2013
On Thu, 31 Oct 2013, Steve Kargl wrote:
> On Thu, Oct 31, 2013 at 09:27:34AM -0400, Mehmet Erol Sanliturk wrote:
>>
>> In FreeBSD amd64 and Clang ,
>> how can I represent 128 bits ( 34 digits ) variables ?
With difficulty, since it is not supported.
> Not sure it can be done with clang, but GCC supports
> a __float128 type. GCC refers to this as its TCmode.
> gfortran, the Fortran compiler that supports REAL(16),
> uses __float128 internally. I've never directly used
> __float128, so can't help beyond this.
>
> If you need 128-bits in C on ia32 or x86_64 hardware,
> you should probably look into using mpfr and mpc.
Even gcc-4.2.1 in FreeBSD generates code to use __float128,
but the support for it isn't compiled into libgcc for some
reason.
Why would anyone want to use 128-bit FP on x86? It is emulated
similarly to on sparc64. On sparc64, emulated 128-bit FP is about
100 times slower than hardware 64-bit FP. The emulation is not
very good, but 128-bit FP is part of the ABI on sparc64 so I would
expect the emulation to give an even larger slowdown factor in
x86.
With 80-bit FP, you can't quite exactly count the number of atoms in
the universe, but you can count the world's GNP in cents for a thousand
years or so. Extra accuracy can reduce problems from numerica
instability and rounding bugs, but a slowdown factor of 100 times is
a large price to pay for that.
Bruce
More information about the freebsd-numerics
mailing list