Рубрики

функция fegetenv () в C / C ++

Функция fegetenv () в C / C ++ указана в заголовочном файле cfenv.h и пытается сохранить текущее состояние среды с плавающей запятой в объекте, указанном в envp . Среда с плавающей запятой — это набор флагов состояния и режимов управления, который включает в себя как исключение с плавающей запятой, так и режим направления округления.

Синтаксис:

int fegetenv( fenv_t* envp )

Параметр: функция принимает один обязательный параметр envp, который указывает объект, в котором хранится состояние среды с плавающей запятой.

Возвращаемое значение: функция возвращает два значения, как показано ниже:

  • В случае успеха возвращается ноль.
  • При неудаче возвращает ненулевое значение.

Ниже программы иллюстрируют вышеуказанную функцию:
Программа 1:

// C ++ программа для иллюстрации
// функция fegetenv ()

  
#include <bits/stdc++.h>

using namespace std;

  
// режим направления округления

void rounding_mode()

{

    cout << "Rounding mode is ->";

    switch (fegetround()) {

    case FE_TONEAREST:

  

        // Округление до ближайшего

        cout << "FE_TONEAREST" << endl;

        break;

    case FE_DOWNWARD:

  

        // Округление вниз

        cout << "FE_DOWNWARD" << endl;

        break;

    case FE_UPWARD:

  

        // Округление вверх

        cout << "FE_UPWARD" << endl;

        break;

    case FE_TOWARDZERO:

  

        // округлить до нуля

        cout << "FE_TOWARDZERO" << endl;

        break;

    default:

        cout << "unknown" << endl;

    };

}

  

int main(void)

{

    fenv_t envp;

  

    // начальная среда

    cout << "Initial environment :" << endl;

  

    // выводим исключение, созданное изначально

    cout << "Exception raised -> \n";

    if (fetestexcept(FE_ALL_EXCEPT)) {

        if (fetestexcept(FE_DIVBYZERO))

            cout << "FE_DIVBYZERO " << endl;

        if (fetestexcept(FE_INEXACT))

            cout << "FE_INEXACT " << endl;

        if (fetestexcept(FE_INVALID))

            cout << "FE_INVALID " << endl;

        if (fetestexcept(FE_OVERFLOW))

            cout << "FE_OVERFLOW " << endl;

        if (fetestexcept(FE_UNDERFLOW))

            cout << "FE_UNDERFLOW " << endl;

    }

    else

        cout << "None" << endl;

  

    // выводим режим направления округления

    rounding_mode();

  

    // Текущая среда

    fegetenv(&envp);

    feraiseexcept(FE_INVALID);

  

    // Установить режим направления округления

    fesetround(FE_DOWNWARD);

  

    // после изменения среды

    cout << endl

         << "Final environment :" << endl;

  

    // выводим исключение

    cout << "Exception raised -> \n";

    if (fetestexcept(FE_ALL_EXCEPT)) {

        if (fetestexcept(FE_DIVBYZERO))

            cout << "FE_DIVBYZERO " << endl;

        if (fetestexcept(FE_INEXACT))

            cout << "FE_INEXACT " << endl;

        if (fetestexcept(FE_INVALID))

            cout << "FE_INVALID " << endl;

        if (fetestexcept(FE_OVERFLOW))

            cout << "FE_OVERFLOW " << endl;

        if (fetestexcept(FE_UNDERFLOW))

            cout << "FE_UNDERFLOW " << endl;

    }

    else

        cout << "None" << endl;

  

    // выводим режим направления округления

    rounding_mode();

  

    return 0;

}

Выход:

Initial environment :
Exception raised -> 
None
Rounding mode is ->FE_TONEAREST

Final environment :
Exception raised -> 
FE_INVALID 
Rounding mode is ->FE_DOWNWARD

Программа 2:

// C ++ программа для иллюстрации
// функция fegetenv ()

  
#include <bits/stdc++.h>

using namespace std;

  
// режим направления округления

void rounding_mode()

{

    cout << "Rounding mode is ->";

    switch (fegetround()) {

    case FE_TONEAREST:

  

        // Округление до ближайшего

        cout << "FE_TONEAREST" << endl;

        break;

    case FE_DOWNWARD:

  

        // Округление вниз

        cout << "FE_DOWNWARD" << endl;

        break;

    case FE_UPWARD:

  

        // Округление вверх

        cout << "FE_UPWARD" << endl;

        break;

    case FE_TOWARDZERO:

  

        // округлить до нуля

        cout << "FE_TOWARDZERO" << endl;

        break;

    default:

        cout << "unknown" << endl;

    };

}

  

int main(void)

{

    fenv_t envp;

  

    // начальная среда

    cout << "Initial environment :" << endl;

  

    // выводим исключение, созданное изначально

    cout << "Exception raised -> \n";

    if (fetestexcept(FE_ALL_EXCEPT)) {

        if (fetestexcept(FE_DIVBYZERO))

            cout << "FE_DIVBYZERO " << endl;

        if (fetestexcept(FE_INEXACT))

            cout << "FE_INEXACT " << endl;

        if (fetestexcept(FE_INVALID))

            cout << "FE_INVALID " << endl;

        if (fetestexcept(FE_OVERFLOW))

            cout << "FE_OVERFLOW " << endl;

        if (fetestexcept(FE_UNDERFLOW))

            cout << "FE_UNDERFLOW " << endl;

    }

    else

        cout << "None" << endl;

  

    // выводим режим направления округления

    rounding_mode();

  

    // Текущая среда

    fegetenv(&envp);

    feraiseexcept(FE_ALL_EXCEPT);

  

    // Установить режим направления округления

    fesetround(FE_DOWNWARD);

  

    // после изменения среды

    cout << endl

         << "Final environment :" << endl;

  

    // выводим исключение

    cout << "Exception raised -> \n";

    if (fetestexcept(FE_ALL_EXCEPT)) {

        if (fetestexcept(FE_DIVBYZERO))

            cout << "FE_DIVBYZERO " << endl;

        if (fetestexcept(FE_INEXACT))

            cout << "FE_INEXACT " << endl;

        if (fetestexcept(FE_INVALID))

            cout << "FE_INVALID " << endl;

        if (fetestexcept(FE_OVERFLOW))

            cout << "FE_OVERFLOW " << endl;

        if (fetestexcept(FE_UNDERFLOW))

            cout << "FE_UNDERFLOW " << endl;

    }

    else

        cout << "None" << endl;

  

    // выводим режим направления округления

    rounding_mode();

  

    return 0;

}

Выход:

Initial environment :
Exception raised -> 
None
Rounding mode is ->FE_TONEAREST

Final environment :
Exception raised -> 
FE_DIVBYZERO 
FE_INEXACT 
FE_INVALID 
FE_OVERFLOW 
FE_UNDERFLOW 
Rounding mode is ->FE_DOWNWARD

Рекомендуемые посты:

функция fegetenv () в C / C ++

0.00 (0%) 0 votes