decimal float support for C++
Janis Johnson
janis187@us.ibm.com
Wed Jul 8 22:33:00 GMT 2009
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:
C: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1312.pdf
C++: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2849.pdf
Janis
More information about the Libstdc++
mailing list