- cmath[meta header]
- macro[meta id-type]
- cpp11[meta cpp]
# define MATH_ERREXCEPT 2
MATH_ERREXCEPT
は、<cmath>
内で浮動小数点例外が発生したかを表す整数定数マクロである。
この定数とmath_errhandling
でビットANDをとった結果がゼロでないか比較することにより、浮動小数点例外が発生したか否かを判定できる。
#include <iostream>
#include <cmath>
#include <cfenv>
int main()
{
std::feclearexcept(FE_ALL_EXCEPT);
std::log(0.0);
if (math_errhandling & MATH_ERREXCEPT) {
int excepts = std::fetestexcept(FE_ALL_EXCEPT);
if (excepts & FE_INVALID) {
std::cout << "FE_INVALID" << std::endl;
}
if (excepts & FE_DIVBYZERO) {
std::cout << "FE_DIVBYZERO" << std::endl;
}
if (excepts & FE_OVERFLOW) {
std::cout << "FE_OVERFLOW" << std::endl;
}
if (excepts & FE_UNDERFLOW) {
std::cout << "FE_UNDERFLOW" << std::endl;
}
if (excepts & FE_INEXACT) {
std::cout << "FE_INEXACT" << std::endl;
}
}
else {
std::cout << "no exception" << std::endl;
}
}
- MATH_ERREXCEPT[color ff0000]
- std::log[link log.md]
- math_errhandling[link math_errhandling.md]
- FE_ALL_EXCEPT[link ../cfenv/fe_all_except.md]
- FE_INEXACT[link ../cfenv/fe_inexact.md]
- FE_INVALID[link ../cfenv/fe_invalid.md]
- FE_OVERFLOW[link ../cfenv/fe_overflow.md]
- FE_UNDERFLOW[link ../cfenv/fe_underflow.md]
- FE_DIVBYZERO[link ../cfenv/fe_divbyzero.md]
- std::feclearexcept[link ../cfenv/feclearexcept.md]
- std::fetestexcept[link ../cfenv/fetestexcept.md]
FE_DIVBYZERO
- C++11
- Clang: 3.0 [mark verified]
- GCC: 4.3 [mark verified]
- ICC: ??
- Visual C++: ??