Tal*_*fek 0 c++ signals exception divide-by-zero
我在 C++ 中遇到了一个奇怪的行为。
运行以下行会导致浮点异常:
long double res = 0 / 0 * 100;
Run Code Online (Sandbox Code Playgroud)
但是,运行以下几行会导致变量res
打印为 -nan:
long double res = static_cast<long double>(0) / 0 * 100;
std::cout << res << std::endl;
Run Code Online (Sandbox Code Playgroud)
谁能澄清为什么会发生这种情况?在什么条件下,计算结果为“nan”,何时会引发除以 0 的异常作为“浮点异常”?
0 / 0
由于两个操作数都具有整数类型,因此子表达式正在执行整数除法。由于整数类型中没有 NaN,因此这通常会生成浮点异常。
相反,static_cast<long double>(0) / 0
由于一个操作数具有浮点类型,因此执行浮点除法。因此,在支持 NaN 的实现上,这通常会导致这些实现上出现 NaN。
请注意,严格来说除以零是未定义的行为,尽管上面是您最有可能遇到的情况。