c++ 除以 0

问题描述 投票:0回答:5

我正在运行长时间的模拟。我将结果记录到一个向量中以计算有关数据的统计信息。我意识到,理论上,这些样本可能是除以零的结果;这只是理论上的,我很确定事实并非如此。为了避免在修改代码后重新运行模拟,我想知道在那种情况下会发生什么。我是否能够意识到是否发生了被 0 除?我会收到错误消息吗? (目前不处理异常)。

谢谢

c++ divide-by-zero
5个回答
55
投票

对于 IEEE 浮点数,有限非零浮点数除以 0 是明确定义的,结果为 +infinity(如果值 > 零)或 -infinity(如果值小于零)。 0.0/0.0 的结果是 NaN。如果您使用整数,则行为未定义。


11
投票

注意 C 标准说(6.5.5):

/ 运算符的结果是除法的商 第一个操作数由第二个; % 运算符的结果是 余。在这两个操作中,如果第二个操作数的值为 零,行为未定义。

所以 something/0 对于整数类型和浮点数都是未定义的(按照标准)。尽管如此,大多数实现都有前面提到的行为(+-INF 或 NAN)。


1
投票

如果你说的是整数,那么你的程序应该在被零除时崩溃。

如果你说的是浮点数,那么除以零是允许的,结果是 INF 或 -INF。现在,如果程序崩溃,很好地处理或继续未定义/意外结果,这完全取决于您的代码。


0
投票

如果你使用 IEEE 浮点数,那么它将返回 0 或 NaN。如果 op1 为 0,您将得到未定义的。如果 op1 大于 0,您将得到 Infinity。如果 op1 小于 0,那么你将得到 -Infinity。如果直接除以 0 或在整数中除以 0,则会出现“浮点异常”错误。


0
投票
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    double a = 123, b = 0;
    double result = a/b;

    string isInfinite = isinf(result) ? "is" : "is not";
    cout << "result=" << result << " " << isInfinite << " infinity" << endl;
}

result=inf 为无穷大

© www.soinside.com 2019 - 2024. All rights reserved.