我正在运行长时间的模拟。我将结果记录到向量中以计算有关数据的统计信息。我意识到,理论上,这些样本可能是除以零的结果。这只是理论上的,我很确定事实并非如此。为了避免修改代码后重新运行模拟,我想知道在这种情况下会发生什么。我是否能够意识到是否发生了除以 0?我会收到错误消息吗?(目前没有处理异常)。
谢谢
我正在运行长时间的模拟。我将结果记录到向量中以计算有关数据的统计信息。我意识到,理论上,这些样本可能是除以零的结果。这只是理论上的,我很确定事实并非如此。为了避免修改代码后重新运行模拟,我想知道在这种情况下会发生什么。我是否能够意识到是否发生了除以 0?我会收到错误消息吗?(目前没有处理异常)。
谢谢
对于 IEEE 浮点数,有限非零浮点数除以 0 是明确定义的,并导致 +infinity(如果值 > 零)或 -infinity(如果值小于零)。0.0/0.0 的结果是 NaN。如果使用整数,则行为未定义。
请注意,C 标准说 (6.5.5):
/ 运算符的结果是第一个操作数除以第二个操作数的商;% 运算符的结果是余数。在这两种操作中,如果第二个操作数的值为零,则行为未定义。
所以对于整数类型和浮点数,something/0 是未定义的(按标准)。尽管如此,大多数实现都有前面提到的行为(+-INF 或 NAN)。
如果您在谈论整数,那么您的程序应该在除以零时崩溃。
如果您说的是浮点数,则允许除以零,结果是 INF 或 -INF。现在,程序是否会崩溃、处理得很好或继续出现未定义/意外的结果,这完全取决于您的代码。
如果您使用 IEEE 浮点数,那么它将返回 0 或 NaN。如果 op1 为 0,您将得到未定义。如果 op1 大于 0,您将获得 Infinity。如果 op1 小于 0,那么您将得到 -Infinity。如果你直接使用除以 0 或整数,你会得到错误“浮点异常”。