This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

decimal float support for C++


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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]