提问人:zzzbbx 提问时间:1/20/2011 更新时间:9/7/2022 访问量:75893
C++ 除以 0
c++ division by 0
问:
我正在运行长时间的模拟。我将结果记录到一个向量中,以计算有关数据的统计数据。我意识到,从理论上讲,这些样本可能是除以零的结果;这只是理论上的,我很确定事实并非如此。为了避免在修改代码后重新运行模拟,我想知道在这种情况下会发生什么。我是否能够意识到是否发生了除以 0 的情况?我会收到错误消息吗?(目前未处理异常情况)。
谢谢
答:
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 是无穷大
评论