IEEE Floating-point Operations

Understanding the IEEE Standard for Floating-point Arithmetic, IEEE 754-2008

This version of the compiler uses a close approximation to the IEEE Standard for Floating-point Arithmetic, version IEEE 754-2008, unless otherwise stated. This standard is common to many microcomputer-based systems due to the availability of fast processors that implement the required characteristics.

This section outlines the characteristics of the IEEE 754-2008 standard and its implementation in the compiler. Except as noted, the description refers to both the IEEE 754-2008 standard and the compiler implementation.

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:

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

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.

Special Values

The following list provides a brief description of the special values that the Intel® C++ Compiler supports.