# Floating-Point Formats

This IEEE 754-2008 standard specifies formats and methods for floating-point representation in computer systems, and recommends formats for data interchange. The exception conditions are defined, and the standard handling of these conditions is specified below. The binary counterpart floating-point exception functions are described in ISO C99. The decimal floating-point exception functions are defined in the fenv.h header file. The compiler supports decimal floating point types in C and C++. The decimal floating point formats are defined in the IEEE 754-2008 standard.

In C, these decimal floating types are supported:

- _Decimal32
- _Decimal64
- _Decimal128

In C++ for Windows* and Linux*, these decimal classes are supported:

- decimal32
- decimal64
- decimal128

### Note

To use this feature in C++ on Linux*, GCC* 4.5 or later is required.

The decimal floating-point is not supported in C++ for macOS*.

To ensure correct decimal floating-point behavior, you must define `__STDC_WANT_DEC_FP__` before any standard headers are included. This is required for the declaration of decimal macros and library functions in order to ensure correct decimal floating-point results at run-time.

Example: Linux*

    #include <iostream>
    #define __STDC_WANT_DEC_FP__
    #include <decimal/decimal>
    typedef std::decimal::decimal32 _Decimal32;
    typedef std::decimal::decimal64 _Decimal64;
    typedef std::decimal::decimal128 _Decimal128;
    #include <dfp754.h>

    using namespace std;
    using namespace std::decimal;

    int main() {
        std::decimal::decimal32 d = 4.7df;
        std::cout << decimal_to_long_double(d) << std::endl;
        return 0;
    }

Example: Windows*

    #include <iostream>
    #define __STDC_WANT_DEC_FP__
    #include <decimal>
    #include <dfp754.h>

    using namespace std;
    using namespace std::decimal;

    int main() {
        std::decimal::decimal32 d = 4.7df;
        std::cout << decimal_to_long_double(d) << std::endl;
        return 0;
    }

## Functions to Check Decimal Floating-Point Status

Use these floating-point exception functions to detect exceptions that occur during decimal floating-point arithmetic:

Floating-Point Functions
Function | Brief Description
--- | ---
`fe_dec_feclearexcept()` | Clears the supported floating-point exceptions.
`fe_dec_fegetexceptflag` | Stores an implementation-defined representation of the states of the floating-point status flags.
`fe_dec_feraiseexcept` | Raises the supported floating-point exceptions.
`fe_dec_fesetexceptflag` | Sets the floating-point status flags.
`fe_dec_fetestexcept()` | Determines which of a specified subset of the floating point exception flags are currently set.

Parent topic: Understanding IEEE Floating-Point Operations