我正在进行长时间的模拟。我将结果记录到矢量中以计算有关数据的统计数据。我意识到,从理论上讲,这些样本可能是零除的结果;这只是理论上的,我很确定情况并非如此。为了避免在修改代码后重新运行模拟,我想知道在这种情况下会发生什么。我是否能够意识到是否发生了0分裂?我会收到错误消息吗? (暂时没有处理例外情况)。
由于
答案 0 :(得分:29)
对于IEEE浮点数,有限非零浮点数除以0是明确定义的,导致+无穷大(如果值> 0)或-infinity(如果该值小于零)。 0.0 / 0.0的结果是NaN。如果使用整数,则行为未定义。
答案 1 :(得分:9)
注意C标准说(6.5.5):
/运算符的结果是来自除法的商 第二个的第一个操作数; %运算符的结果是 剩余。在两个操作中,如果第二个操作数的值是 零,行为未定义。
因此,对于整数类型和浮点,未定义(按标准)/ 0。然而,大多数实现都有前面提到的行为(+ -INF或NAN)。
答案 2 :(得分:3)
如果你正在说整数,那么你的程序应该在除以零时崩溃。
如果您正在谈论浮点数,则允许除以零,结果为INF或-INF。现在,如果程序崩溃,处理得很好或者继续出现未定义/意外的结果,这完全取决于您的代码。
答案 3 :(得分:2)
取决于您使用的是整数还是浮点数。对于整数,您将获得运行时异常。对于浮点数,结果将为+/-无穷大,或NaN
为(0.0 / 0.0),您可以使用std::isnan()
进行测试。
答案 4 :(得分:1)
如果使用IEEE浮点数,则它将返回0或NaN。如果op1为0,您将得到未定义。如果op1高于0,您将获得Infinity。如果op1低于0,那么你将获得-Infinity。如果你使用直接除以0或整数,你将得到错误"浮点异常"。