Floating-point extensions part 1: binary floating-point arithmetic
Floating-point extensions for C - Part 1: Binary floating-point arithmetic, ISO/IEC TS 18661-1:2014, defines the following new components for the C standard library, as recommended by ISO/IEC/IEEE 60559:2011 (the current revision of IEEE-754)
|    __STDC_IEC_60559_BFP__  | 
   integer constant of type long and value 201ymmL, replaces __STDC_IEC_559__  (macro constant)  | 
|    __STDC_IEC_60559_COMPLEX__  | 
   integer constant of type long and value 201ymmL, replaces __STDC_IEC_559_COMPLEX__  (macro constant)  | 
|   Defined in header  
<limits.h>  | |
|    CHAR_WIDTH SCHAR_WIDTH UCHAR_WIDTHSHRT_WIDTH USHRT_WIDTHINT_WIDTH UINT_WIDTHLONG_WIDTH ULONG_WIDTHLLONG_WIDTH ULLONG_WIDTH (FP Ext 1 TS)  | 
  width, in bits, of the corresponding type  (macro constant)  | 
|   Defined in header  
<float.h>  | |
|    (FP Ext 1 TS)  | 
  conversions between all supported binary floating-point types and character sequences with at most CR_DECIMAL_DIG significant decimal digits are correctly rounded (this is at least DECIMAL_DIG + 3)  (macro constant)  | 
|   Defined in header  
<fenv.h>  | |
|    femode_t (FP Ext 1 TS)  | 
  collection of dynamic floating-point control modes supported by the implementation, including the dynamic rounding direction mode  (typedef)  | 
|    FE_DFL_MODE (FP Ext 1 TS)  | 
  pointer to the default femode_t   (macro constant)  | 
|    FE_SNANS_ALWAYS_SIGNAL (FP Ext 1 TS)  | 
   defined (as integer constant 1) if sNaN arguments cause the functions that suppress qNaNs, like hypot or fmax, to raise FE_INVALID and return a qNaN  (macro constant)  | 
|    (FP Ext 1 TS)  | 
  sets the specified floating-point exception flags without causing any side-effects that raising them would  (function)  | 
|    (FP Ext 1 TS)  | 
  tests if given flags are in a saved representation of the floating-point exception flags  (function)  | 
|    (FP Ext 1 TS)  | 
  gets and sets  all the implementation’s dynamic floating-point control modes collectively  (function)  | 
|   Defined in header  
<stdint.h>  | |
|    INTn_WIDTH UINTn_WIDTHINT_LEASTn_WIDTH UINT_LEASTn_WIDTHINT_FASTn_WIDTH UINT_FASTn_WIDTHINTPTR_WIDTH UINTPTR_WIDTHINTMAX_WIDTH  UINTMAX_WIDTHPTRDIFF_WIDTHSIG_ATOMIC_WIDTHSIZE_WIDTHWCHAR_WIDTH WINT_WIDTH (FP Ext 1 TS)  | 
  width, in bits, of the corresponding type  (macro constant)  | 
|   Defined in header  
<stdlib.h>  | |
|    (FP Ext 1 TS)  | 
  convert a single foating-point number to string using the specified snprintf format  (function)  | 
|   Defined in header  
<math.h>  | |
|    FP_INT_UPWARDFP_INT_DOWNWARDFP_INT_TOWARDZERO
FP_INT_TONEARESTFROMZEROFP_INT_TONEAREST (FP Ext 1 TS)  | 
   rounding direction for the functions ceil, floor, trunc, round, and roundeven, suitable for use with fromfp family of functions  (macro constant)  | 
|    FP_LLOGB0 (FP Ext 1 TS)  | 
  value returned by llogb if the argument is zero  (macro constant)  | 
|    FP_LLOGBNAN (FP Ext 1 TS)  | 
  value returned by llogb if the argument is NaN  (macro constant)  | 
|    (FP Ext 1 TS)  | 
  represents a signalling NaN for float, double, long double respectively  (macro constant)  | 
|    FP_FAST_FADD FP_FAST_FADDL FP_FAST_DADDLFP_FAST_FSUB FP_FAST_FSUBL FP_FAST_DSUBLFP_FAST_FMUL FP_FAST_FMULL FP_FAST_DMULLFP_FAST_FDIV FP_FAST_FDIVL FP_FAST_DDIVLFP_FAST_FFMA FP_FAST_FFMAL FP_FAST_DFMALFP_FAST_FSQRT FP_FAST_FSQRTL FP_FAST_DSQRTL (FP Ext 1 TS)  | 
  if defined, indicates that the corresponding function executes faster than the equivalent function in a larger type followed by a cast to target type  (macro constant)  | 
|    iseqsig (FP Ext 1 TS)  | 
    (function macro)  | 
|    iscanonical (FP Ext 1 TS)  | 
  tests if the floating-point value is canonical  (function macro)  | 
|    issignaling (FP Ext 1 TS)  | 
  tests if the floating-point value is a signalling NaN  (function macro)  | 
|    issubnormal (FP Ext 1 TS)  | 
  tests if the floating-point value is subnormal  (function macro)  | 
|    iszero (FP Ext 1 TS)  | 
  tests if the floating-point value is a zero (positive, negative, unsigned)  (function macro)  | 
|    (FP Ext 1 TS)  | 
  round to signed integer using the specified rounding direction  (function)  | 
|    (FP Ext 1 TS)  | 
  round to unsigned integer using the specified rounding direction  (function)  | 
|    (FP Ext 1 TS)  | 
  round to signed integer using the specified rounding direction, reporting inexactness  (function)  | 
|    (FP Ext 1 TS)  | 
  round to unsigned integer using the specified rounding direction, reporting inexactness  (function)  | 
|    (FP Ext 1 TS)  | 
  rounds to nearest, halfway cases to even  (function)  | 
|    (FP Ext 1 TS)  | 
  equivalent to logb except the return type is long  (function)  | 
|    (FP Ext 1 TS)  | 
  returns the value of their argument of maximum magnitude  (function)  | 
|    (FP Ext 1 TS)  | 
  returns the value of their argument of minimum magnitude  (function)  | 
|    (FP Ext 1 TS)  | 
  returns the next greater representable floating-point value  (function)  | 
|    (FP Ext 1 TS)  | 
  returns the next smaller representable floating-point value  (function)  | 
|    (FP Ext 1 TS)  | 
  calculates x+y as if in infinite precision and rounded once to target type  (function)  | 
|    (FP Ext 1 TS)  | 
  calculates x-y as if in infinite precision and rounded once to target type  (function)  | 
|    (FP Ext 1 TS)  | 
  calculates x*y as if in infinite precision and rounded once to target type  (function)  | 
|    (FP Ext 1 TS)  | 
  calculates x/y as if in infinite precision and rounded once to target type  (function)  | 
|    (FP Ext 1 TS)  | 
  calculates the same as fma as if in infinite precision and rounded once to target type  (function)  | 
|    (FP Ext 1 TS)  | 
  calculates the same as sqrt as if in infinite precision and rounded once to target type  (function)  | 
|    (FP Ext 1 TS)  | 
  orders two floating-point values using the ISO 60559 total order relation  (function)  | 
|    (FP Ext 1 TS)  | 
  orders the magnitudes of two floating-point values using the ISO 60559 total order relation  (function)  | 
|    (FP Ext 1 TS)  | 
  obtains the ISO 60559 canonical binary encoding of the given floating-point value  (function)  | 
|    (FP Ext 1 TS)  | 
  extracts the payload from the given NaN value  (function)  | 
|    (FP Ext 1 TS)  | 
  creates a quiet NaN with the specified payload  (function)  | 
|    (FP Ext 1 TS)  | 
  creates a signalling NaN with the specified payload  (function)  | 
|   Defined in header  
<tgmath.h>  | |
|    roundeven (FP Ext 1 TS)  | 
   generic overload of roundeven  (function)  | 
|    llogb (FP Ext 1 TS)  | 
   generic overload of llogb  (function)  | 
|    fmaxmag (FP Ext 1 TS)  | 
   generic overload of fmaxmag  (function)  | 
|    fminmag (FP Ext 1 TS)  | 
   generic overload of fminmag  (function)  | 
|    nextup (FP Ext 1 TS)  | 
   generic overload of nextup  (function)  | 
|    nextdown (FP Ext 1 TS)  | 
   generic overload of nextdown  (function)  | 
|    fromfp (FP Ext 1 TS)  | 
   generic overload of fromfp  (function)  | 
|    ufromfp (FP Ext 1 TS)  | 
   generic overload of ufromfp  (function)  | 
|    fromfpx (FP Ext 1 TS)  | 
   generic overload of fromfpx  (function)  | 
|    ufromfpx (FP Ext 1 TS)  | 
   generic overload of ufromfpx  (function)  | 
|    nextdown (FP Ext 1 TS)  | 
   generic overload of nextdown  (function)  | 
|    totalorder (FP Ext 1 TS)  | 
   generic overload of totalorder  (function)  | 
|    totalordermag (FP Ext 1 TS)  | 
   generic overload of totalordermag  (function)  | 
|    fadd (FP Ext 1 TS)  | 
   generic overload of fadd  (function)  | 
|    dadd (FP Ext 1 TS)  | 
   generic overload of dadd  (function)  | 
|    fsub (FP Ext 1 TS)  | 
   generic overload of fsub  (function)  | 
|    dsub (FP Ext 1 TS)  | 
   generic overload of dsub  (function)  | 
|    fmul (FP Ext 1 TS)  | 
   generic overload of fmul  (function)  | 
|    dmul (FP Ext 1 TS)  | 
   generic overload of dmul  (function)  | 
|    fdiv (FP Ext 1 TS)  | 
   generic overload of fdiv  (function)  | 
|    ddiv (FP Ext 1 TS)  | 
   generic overload of ddiv  (function)  | 
|    ffma (FP Ext 1 TS)  | 
   generic overload of ffma  (function)  | 
|    dfma (FP Ext 1 TS)  | 
   generic overload of dfma  (function)  | 
|    fsqrt (FP Ext 1 TS)  | 
   generic overload of fsqrt  (function)  | 
|    dsqrt (FP Ext 1 TS)  | 
   generic overload of dsqrt  (function)  | 
Notes
The standard C macros __STDC_IEC_559__ and __STDC_IEC_559_COMPLEX__ are made obsolete by this technical specification.
All functions and macros added to the C library by this extension are only declared if a macro __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the corresponding header is included.
Besides additions to the standard library, ISO/IEC TS 18661-1:2014 makes a number of changes to the core language, notably splitting floating-point control between static (controlled by the new #pragma STDC FENV_ROUND), and dynamic (controlled by fesetround). Most math.h functions respect the static rounding mode, if set, over the dynamic rounding mode.
| This section is incomplete Reason: add to the pragma page or describe the pragma in full here?  |