Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      feholdexcept

      From cppreference.com
      <c‎ |numeric‎ |fenv
       
       
       
       
      Defined in header<fenv.h>
      int feholdexcept( fenv_t* envp);
      (since C99)

      First, saves the current floating-point environment to the object pointed to byenvp (similar tofegetenv), then clears all floating-point status flags, and then installs the non-stop mode: future floating-point exceptions will not interrupt execution (will not trap), until the floating-point environment is restored byfeupdateenv orfesetenv.

      This function may be used in the beginning of a subroutine that must hide the floating-point exceptions it may raise from the caller. If only some exceptions must be suppressed, while others must be reported, the non-stop mode is usually ended with a call tofeupdateenv after clearing the unwanted exceptions.

      Contents

      [edit]Parameters

      envp - pointer to the object of typefenv_t where the floating-point environment will be stored

      [edit]Return value

      0 on success, non-zero otherwise.

      [edit]Example

      Run this code
      #include <stdio.h>#include <fenv.h>#include <float.h> #pragma STDC FENV_ACCESS ON void show_fe_exceptions(void){printf("current exceptions raised: ");if(fetestexcept(FE_DIVBYZERO))printf(" FE_DIVBYZERO");if(fetestexcept(FE_INEXACT))printf(" FE_INEXACT");if(fetestexcept(FE_INVALID))printf(" FE_INVALID");if(fetestexcept(FE_OVERFLOW))printf(" FE_OVERFLOW");if(fetestexcept(FE_UNDERFLOW))printf(" FE_UNDERFLOW");if(fetestexcept(FE_ALL_EXCEPT)==0)printf(" none");printf("\n");} double x2(double x)/* times two */{    fenv_t curr_excepts; /* Save and clear current f-p environment. */    feholdexcept(&curr_excepts); /* Raise inexact and overflow exceptions. */printf("In x2():  x = %f\n", x=x*2.0);    show_fe_exceptions();feclearexcept(FE_INEXACT);/* hide inexact exception from caller */ /* Merge caller's exceptions (FE_INVALID)        *//* with remaining x2's exceptions (FE_OVERFLOW). */feupdateenv(&curr_excepts);return x;} int main(void){feclearexcept(FE_ALL_EXCEPT);feraiseexcept(FE_INVALID);/* some computation with invalid argument */    show_fe_exceptions();printf("x2(DBL_MAX) = %f\n", x2(DBL_MAX));    show_fe_exceptions(); return0;}

      Output:

      current exceptions raised:  FE_INVALIDIn x2():  x = infcurrent exceptions raised:  FE_INEXACT FE_OVERFLOWx2(DBL_MAX) = infcurrent exceptions raised:  FE_INVALID FE_OVERFLOW

      [edit]References

      • C11 standard (ISO/IEC 9899:2011):
      • 7.6.4.2 The feholdexcept function (p: 213-214)
      • C99 standard (ISO/IEC 9899:1999):
      • 7.6.4.2 The feholdexcept function (p: 194-195)

      [edit]See also

      restores the floating-point environment and raises the previously raise exceptions
      (function)[edit]
      saves or restores the current floating-point environment
      (function)[edit]
      default floating-point environment
      (macro constant)[edit]
      C++ documentation forfeholdexcept
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/numeric/fenv/feholdexcept&oldid=133799"

      [8]ページ先頭

      ©2009-2025 Movatter.jp