STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Macros | Typedefs | Functions
fenv.h File Reference
#include <corecrt.h>
#include <float.h>

Go to the source code of this file.

Classes

struct  fenv_t
 

Macros

#define _FENV
 
#define FE_TONEAREST   _RC_NEAR
 
#define FE_UPWARD   _RC_UP
 
#define FE_DOWNWARD   _RC_DOWN
 
#define FE_TOWARDZERO   _RC_CHOP
 
#define FE_ROUND_MASK   _MCW_RC
 
#define FE_INEXACT   _SW_INEXACT
 
#define FE_UNDERFLOW   _SW_UNDERFLOW
 
#define FE_OVERFLOW   _SW_OVERFLOW
 
#define FE_DIVBYZERO   _SW_ZERODIVIDE
 
#define FE_INVALID   _SW_INVALID
 
#define FE_ALL_EXCEPT   (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
 
#define FE_DFL_ENV   (&_Fenv1)
 
#define _BEGIN_PRAGMA_OPTIMIZE_DISABLE(flags, bug, reason)   __pragma(optimize(flags, off))
 
#define _BEGIN_PRAGMA_OPTIMIZE_ENABLE(flags, bug, reason)   __pragma(optimize(flags, on))
 
#define _END_PRAGMA_OPTIMIZE()   __pragma(optimize("", on))
 

Typedefs

typedef unsigned long fexcept_t
 
typedef struct fenv_t fenv_t
 

Functions

_ACRTIMP int __cdecl fegetround (void)
 
_ACRTIMP int __cdecl fesetround (_In_ int _Round)
 
_ACRTIMP int __cdecl fegetenv (_Out_ fenv_t *_Env)
 
_ACRTIMP int __cdecl fesetenv (_In_ fenv_t const *_Env)
 
_ACRTIMP int __cdecl feclearexcept (_In_ int _Flags)
 
_ACRTIMP _Success_ (return==0) int __cdecl feholdexcept(_Out_ fenv_t *_Env)
 
_ACRTIMP int __cdecl fetestexcept (_In_ int _Flags)
 
_ACRTIMP int __cdecl fegetexceptflag (_Out_ fexcept_t *_Except, _In_ int _TestFlags)
 
_ACRTIMP int __cdecl fesetexceptflag (_In_ fexcept_t const *_Except, _In_ int _SetFlags)
 
 __declspec (selectany) extern const fenv_t _Fenv1
 
__inline int __CRTDECL feraiseexcept (_In_ int _Except)
 
__inline int __CRTDECL feupdateenv (_In_ const fenv_t *_Penv)
 

Macro Definition Documentation

#define _BEGIN_PRAGMA_OPTIMIZE_DISABLE (   flags,
  bug,
  reason 
)    __pragma(optimize(flags, off))
#define _BEGIN_PRAGMA_OPTIMIZE_ENABLE (   flags,
  bug,
  reason 
)    __pragma(optimize(flags, on))
#define _END_PRAGMA_OPTIMIZE ( )    __pragma(optimize("", on))
#define _FENV
#define FE_ALL_EXCEPT   (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
#define FE_DFL_ENV   (&_Fenv1)
#define FE_DIVBYZERO   _SW_ZERODIVIDE
#define FE_DOWNWARD   _RC_DOWN
#define FE_INEXACT   _SW_INEXACT
#define FE_INVALID   _SW_INVALID
#define FE_OVERFLOW   _SW_OVERFLOW
#define FE_ROUND_MASK   _MCW_RC
#define FE_TONEAREST   _RC_NEAR
#define FE_TOWARDZERO   _RC_CHOP
#define FE_UNDERFLOW   _SW_UNDERFLOW
#define FE_UPWARD   _RC_UP

Typedef Documentation

typedef struct fenv_t fenv_t
typedef unsigned long fexcept_t

Function Documentation

__declspec ( selectany  ) const
_ACRTIMP _Success_ ( return  = =0)
_ACRTIMP int __cdecl feclearexcept ( _In_ int  _Flags)
_ACRTIMP int __cdecl fegetenv ( _Out_ fenv_t _Env)
_ACRTIMP int __cdecl fegetexceptflag ( _Out_ fexcept_t _Except,
_In_ int  _TestFlags 
)
_ACRTIMP int __cdecl fegetround ( void  )
__inline int __CRTDECL feraiseexcept ( _In_ int  _Except)
93  {
94  static struct
95  {
96  int _Except_Val;
97  double _Num;
98  double _Denom;
99  } const _Table[] =
100  { // Raise exception by evaluating num / denom:
101  {FE_INVALID, 0.0, 0.0 },
102  {FE_DIVBYZERO, 1.0, 0.0 },
103  {FE_OVERFLOW, 1e+300, 1e-300 },
104  {FE_UNDERFLOW, 1e-300, 1e+300 },
105  {FE_INEXACT, 2.0, 3.0 }
106  };
107 
108  double _Ans = 0.0;
109  int _N;
110 
111  if ((_Except &= FE_ALL_EXCEPT) == 0)
112  {
113  return 0;
114  }
115 
116  // Raise the exceptions not masked:
117  for (_N = 0; _N < sizeof(_Table) / sizeof(_Table[0]); ++_N)
118  {
119  if ((_Except & _Table[_N]._Except_Val) != 0)
120  {
121  _Ans = _Table[_N]._Num / _Table[_N]._Denom;
122 
123  // x87 exceptions are raised immediately before execution of the
124  // next floating point instruction. If we're using /arch:IA32,
125  // force the exception to be raised immediately:
126  #if defined _M_IX86 && _M_IX86_FP == 0
127  __asm fwait;
128  #endif
129  }
130  }
131 
132  return 0;
133  }
#define FE_OVERFLOW
Definition: fenv.h:43
#define FE_DIVBYZERO
Definition: fenv.h:44
_In_ size_t _Deref_pre_opt_z_ char const _In_ size_t _N
Definition: wchar.h:78
#define FE_UNDERFLOW
Definition: fenv.h:42
#define FE_INVALID
Definition: fenv.h:45
#define FE_ALL_EXCEPT
Definition: fenv.h:47
#define FE_INEXACT
Definition: fenv.h:41
_ACRTIMP int __cdecl fesetenv ( _In_ fenv_t const *  _Env)
_ACRTIMP int __cdecl fesetexceptflag ( _In_ fexcept_t const *  _Except,
_In_ int  _SetFlags 
)
_ACRTIMP int __cdecl fesetround ( _In_ int  _Round)
_ACRTIMP int __cdecl fetestexcept ( _In_ int  _Flags)
__inline int __CRTDECL feupdateenv ( _In_ const fenv_t _Penv)
137  {
138  int _Except = fetestexcept(FE_ALL_EXCEPT);
139 
140  if (fesetenv(_Penv) != 0 || feraiseexcept(_Except) != 0)
141  {
142  return 1;
143  }
144 
145  return 0;
146  }
__inline int __CRTDECL feraiseexcept(_In_ int _Except)
Definition: fenv.h:92
_ACRTIMP int __cdecl fetestexcept(_In_ int _Flags)
#define FE_ALL_EXCEPT
Definition: fenv.h:47
_ACRTIMP int __cdecl fesetenv(_In_ fenv_t const *_Env)