Namespaces
Variants
Views
Actions

Difference between revisions of "c/numeric/fenv"

From cppreference.com
< c‎ | numeric
m (Text replace - "{{tdcl list begin" to "{{dcl list begin")
m (fmt)
 
(14 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{title|Floating point environment}}
+
{{title|Floating-point environment}}
{{c/numeric/fenv/sidebar}}
+
{{c/numeric/fenv/navbar}}
  
{{todo|description from C++}}
+
The floating-point environment is the set of floating-point status flags and control modes supported by the implementation. It is thread-local, each thread inherits the initial state of its floating-point environment from the parent thread. Floating-point operations modify the floating-point status flags to indicate abnormal results or auxiliary information. The state of floating-point control modes affects the outcomes of some floating-point operations.
 +
 
 +
The floating-point environment access and modification is only meaningful when {{ltt|cpp/preprocessor/impl|#pragma STDC FENV_ACCESS}} is set to {{tt|ON}}. Otherwise the implementation is free to assume that floating-point control modes are always the default ones and that floating-point status flags are never tested or modified. In practice, few current compilers, such as HP aCC, Oracle Studio, and IBM XL, support the {{c/core|#pragma}} explicitly, but most compilers allow meaningful access to the floating-point environment anyway.
  
 
===Types===
 
===Types===
{{dcl list begin}}
+
{{dsc begin}}
{{tdcl list header | fenv.h}}
+
{{dsc header|fenv.h}}
{{tdcl list item | {{c|fenv_t}} | The type representing the entire floating-point environment | notes={{mark c99}}}}
+
{{dsc|{{c|fenv_t}}|The type representing the entire floating-point environment|notes={{mark c99}}}}
{{tdcl list item | {{c|fexcept_t}} | The type representing all floating-point status flags collectively | notes={{mark c99}}}}
+
{{dsc|{{c|fexcept_t}}|The type representing all floating-point status flags collectively|notes={{mark c99}}}}
{{tdcl list end}}
+
{{dsc end}}
 +
 
 
===Functions===
 
===Functions===
{{dcl list begin}}
+
{{dsc begin}}
{{dcl list fun | c/numeric/fenv/feclearexcept | clears the specified floating-point status flags|notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc feclearexcept}}
{{dcl list fun | c/numeric/fenv/fetestexcept | determines which of the specified floating-point status flags are set|notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc fetestexcept}}
{{dcl list fun | c/numeric/fenv/feraiseexcept | raises the specified floating-point exceptions|notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc feraiseexcept}}
{{dcl list fun | c/numeric/fenv/feexceptflag | title=fegetexceptflag<br>fesetexceptflag|copies the state of the specified floating-point status flags from or to the floating-point environment|notes={{mark c99}}<br>{{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc feexceptflag}}
{{dcl list fun | c/numeric/fenv/feround | title=fegetround<br>fesetround | gets or sets rounding  direction | notes={{mark c99}}<br>{{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc feround}}
{{dcl list fun | c/numeric/fenv/feenv | title=fegetenv<br>fesetenv |  saves or restores the current floating point environment|notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc feenv}}
{{dcl list fun | c/numeric/fenv/feholdexcept | saves the environment, clears all status flags and ignores all future errors|notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc feholdexcept}}
{{dcl list fun | c/numeric/fenv/feupdateenv | restores the floating-point environment and raises the previously raise exceptions|notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc feupdateenv}}
{{dcl list end}}
+
{{dsc end}}
  
 
===Macros===
 
===Macros===
{{dcl list begin}}
+
{{dsc begin}}
{{dcl list macro const | c/numeric/fenv/FE_exceptions | title=FE_ALL_EXCEPT<br>FE_DIVBYZERO<br>FE_INEXACT<br>FE_INVALID<br>FE_OVERFLOW<br>FE_UNDERFLOW | floating-point exceptions | notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc FE_exceptions}}
{{dcl list macro const | c/numeric/fenv/FE_round | title=FE_DOWNWARD<br>FE_TONEAREST<br>FE_TOWARDZERO<br>FE_UPWARD | floating-point rounding direction|notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc FE_round}}
{{dcl list macro const | c/numeric/fenv/FE_DFL_ENV | default floating-point environment|notes={{mark c99}}}}
+
{{dsc inc|c/numeric/fenv/dsc FE_DFL_ENV}}
{{dcl list end}}
+
{{dsc end}}
 +
 
 +
===References===
 +
{{ref std c23}}
 +
{{ref std|section=7.6|title=Floating-point environment <fenv.h>|p=TBD}}
 +
{{ref std|section=7.31.4|title=Floating-point environment <fenv.h>|p=TBD}}
 +
{{ref std end}}
 +
{{ref std c17}}
 +
{{ref std|section=7.6|title=Floating-point environment <fenv.h>|p=150-156}}
 +
{{ref std|section=7.31.4|title=Floating-point environment <fenv.h>|p=332}}
 +
{{ref std end}}
 +
{{ref std c11}}
 +
{{ref std|section=7.6|title=Floating-point environment <fenv.h>|p=206-215}}
 +
{{ref std|section=7.31.4|title=Floating-point environment <fenv.h>|p=455}}
 +
{{ref std end}}
 +
{{ref std c99}}
 +
{{ref std|section=7.6|title=Floating-point environment <fenv.h>|p=187-196}}
 +
{{ref std end}}
 +
 
 +
===See also===
 +
{{dsc begin}}
 +
{{dsc see cpp|cpp/numeric/fenv|Floating-point environment}}
 +
{{dsc end}}
  
{{todo|FENV_ACCESS}}
+
{{langlinks|ar|cs|de|es|fr|it|ja|ko|pl|pt|ru|tr|zh}}

Latest revision as of 08:02, 2 December 2023

The floating-point environment is the set of floating-point status flags and control modes supported by the implementation. It is thread-local, each thread inherits the initial state of its floating-point environment from the parent thread. Floating-point operations modify the floating-point status flags to indicate abnormal results or auxiliary information. The state of floating-point control modes affects the outcomes of some floating-point operations.

The floating-point environment access and modification is only meaningful when #pragma STDC FENV_ACCESS is set to ON. Otherwise the implementation is free to assume that floating-point control modes are always the default ones and that floating-point status flags are never tested or modified. In practice, few current compilers, such as HP aCC, Oracle Studio, and IBM XL, support the #pragma explicitly, but most compilers allow meaningful access to the floating-point environment anyway.

Contents

[edit] Types

Defined in header <fenv.h>
fenv_t The type representing the entire floating-point environment
fexcept_t The type representing all floating-point status flags collectively

[edit] Functions

clears the specified floating-point status flags
(function) [edit]
determines which of the specified floating-point status flags are set
(function) [edit]
raises the specified floating-point exceptions
(function) [edit]
copies the state of the specified floating-point status flags from or to the floating-point environment
(function) [edit]
gets or sets rounding direction
(function) [edit]
saves or restores the current floating-point environment
(function) [edit]
saves the environment, clears all status flags and ignores all future errors
(function) [edit]
restores the floating-point environment and raises the previously raise exceptions
(function) [edit]

[edit] Macros

floating-point exceptions
(macro constant) [edit]
floating-point rounding direction
(macro constant) [edit]
default floating-point environment
(macro constant) [edit]

[edit] References

  • C23 standard (ISO/IEC 9899:2024):
  • 7.6 Floating-point environment <fenv.h> (p: TBD)
  • 7.31.4 Floating-point environment <fenv.h> (p: TBD)
  • C17 standard (ISO/IEC 9899:2018):
  • 7.6 Floating-point environment <fenv.h> (p: 150-156)
  • 7.31.4 Floating-point environment <fenv.h> (p: 332)
  • C11 standard (ISO/IEC 9899:2011):
  • 7.6 Floating-point environment <fenv.h> (p: 206-215)
  • 7.31.4 Floating-point environment <fenv.h> (p: 455)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.6 Floating-point environment <fenv.h> (p: 187-196)

[edit] See also

C++ documentation for Floating-point environment