使用nearbyint舍入时没有例外保证()

时间:2016-06-24 08:39:28

标签: c++11 rounding

我知道 nearbyint 允许我在不抛出异常的情况下舍入整数。可以使用feclearexcept检查错误或查看是否发生了舍入( nearbyint 的情况总是如此)。

任何人都可以向我展示一个例子,说明何时会抛出一个可以通过使用nearbyint避免的异常?

以下是该函数的正常使用示例:

#include <cfenv>
#include <cmath>
#include <iostream>

void test(const char* title, int round_mode)
{
    std::feclearexcept(FE_ALL_EXCEPT);
    std::fesetround(round_mode);
    std::cout << title << std::endl;
    std::cout << "nearbyint(2.5) = " << std::nearbyint(2.5) << std::endl;
    std::cout << "nearbyint(-2.5) = " << std::nearbyint(-2.5) << std::endl;
    std::cout << "FE_INEXACT = " << std::boolalpha << (std::fetestexcept(FE_INEXACT) != 0) << std::endl << std::endl;   // This will always be true.
}

#define test(mode) test(#mode, mode)

int main()
{
#ifdef FE_DOWNWARD
    test(FE_DOWNWARD);
#endif
#ifdef FE_TONEAREST
    test(FE_TONEAREST);
#endif
#ifdef FE_TOWARDZERO
    test(FE_TOWARDZERO);
#endif
#ifdef FE_UPWARD
    test(FE_UPWARD);
#endif
}

0 个答案:

没有答案