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