This is the mail archive of the
mailing list for the GCC project.
decimal float support for C++
- From: Janis Johnson <janis187 at us dot ibm dot com>
- To: gcc at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Date: Wed, 08 Jul 2009 15:32:53 -0700
- Subject: decimal float support for C++
- Reply-to: janis187 at us dot ibm dot com
I'm investigating support for decimal floating-point arithmetic in G++.
GCC currently supports this functionality in C for several targets based
on ISO/IEC TR 24732. The C support adds 3 new scalar types: _Decimal32,
_Decimal64, and _Decimal128. With support for mangling those types and
defining typedefs to the underlying type modes, G++ already passes
almost all of GCC's decimal float tests.
The C++ standards committee defined quite different support for C++ in
ISO/IEC DTR 24733, "Extension for the programming language C++ to
support decimal floating-point arithmetic". It defines the support in
terms of classes decimal32, decimal64, and decimal128 in namespace
decimal, defined in <decimal>, and allows decimal floating-point
literals as a conforming extension.
If libstdc++ support can depend on compiler support for the decimal
float type modes then the support is straightforward, with classes that
contain a data member of the type mode. The only tricky part is
passing arguments and return values in a way that is compatible with C,
since one is a scalar and the other is a class. This affects not just
intercallability between user code written in C and C++, but also
access to the decimal float math functions defined for both C and C++.
Given that libstdc++ is used with compilers other than G++, is it
allowable to depend on non-standard C++ compiler support? An
alternative is for the libstdc++ support to use decNumber and/or libbid,
but that would be less efficient and more time-consuming to implement.
Both TRs are available online: