This is the mail archive of the 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:

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