#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;
}