C++ 除以 0

c++ division by 0

提问人:zzzbbx 提问时间:1/20/2011 更新时间:9/7/2022 访问量:75893

问:

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

谢谢

C++(英语:C++) 除以零

评论

4赞 EboMike 1/20/2011
我们在这里谈论的是什么类型?浮?

答:

57赞 etarion 1/20/2011 #1

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

0赞 Shinnok 1/20/2011 #2

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

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

11赞 Огњен Шобајић 3/14/2014 #3

请注意,C标准说(6.5.5):

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

因此,对于积分类型和浮点数,某些 something/0 都是未定义的(根据标准)。然而,大多数实现都具有上述行为(+-INF 或 NAN)。

0赞 goblin01 2/17/2018 #4

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

0赞 aztack 9/7/2022 #5
#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 是无穷大