std::feraiseexcept(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

🌸 NAME 🌸

okay so bestie, welcome to std::feraiseexcept(3) from the C++ Standard Libary manual ✨ (yes, the header spells it "Libary" β€” we're keeping that, no cap). This page is literally about std::feraiseexcept β€” the function whose whole job is raising floating-point exceptions, and she does it with main character energy πŸ’….

✨ Synopsis ✨

Defined in header <cfenv>
int feraiseexcept( int excepts );  (since C++11)

Attempts to raise all floating point exceptions listed in excepts (a bitwise OR of the floating point exception macros). If one of the exceptions is FE_OVERFLOW or FE_UNDERFLOW, this function may additionally raise FE_INEXACT. The order in which the exceptions are raised is unspecified, except that FE_OVERFLOW and FE_UNDERFLOW are always raised before FE_INEXACT.

lowkey important: the order is unspecified, but FE_OVERFLOW and FE_UNDERFLOW are always raised before FE_INEXACT. That part is not up for debate, periodt.

πŸŽ€ Parameters πŸŽ€

  • excepts β€” bitmask listing the exception flags to raise.

πŸ’– Return value πŸ’–

0 if all listed exceptions were raised, non-zero value otherwise.

So: if every listed exception got raised, you get 0 β€” slay. If not, you get a non-zero value β€” not slay, but useful 😭.

🧚 Example 🧚

// Run this code

#include <cfenv>
#include <iostream>

// #pragma STDC FENV_ACCESS ON

int main()
{
    std::feclearexcept(FE_ALL_EXCEPT);
    const int r = std::feraiseexcept(FE_UNDERFLOW | FE_DIVBYZERO);
    std::cout << "Raising divbyzero and underflow simultaneously "
              << (r ? "fails" : "succeeds") << " and results in\n";

    const int e = std::fetestexcept(FE_ALL_EXCEPT);
    if (e & FE_DIVBYZERO)
        std::cout << "division by zero\n";
    if (e & FE_INEXACT)
        std::cout << "inexact\n";
    if (e & FE_INVALID)
        std::cout << "invalid\n";
    if (e & FE_UNDERFLOW)
        std::cout << "underflow\n";
    if (e & FE_OVERFLOW)
        std::cout << "overflow\n";
}

Output:

Raising divbyzero and underflow simultaneously succeeds and results in
division by zero
underflow

πŸ”₯ See also πŸ”₯

  • feclearexcept β€” clears the specified floating-point status flags (C++11) (function).
  • fetestexcept β€” determines which of the specified floating-point status flags are set (C++11) (function).
  • C documentation for feraiseexcept.

catch you later bestie πŸ’– this page came from http://cppreference.com, version/date 2024.06.10 β€” mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from