c ++除以0

Bob*_*Bob 16 c++ divide-by-zero

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

谢谢

eta*_*ion 34

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

  • 需要明确的是,如果浮点数 0.0 除以整数 0,则该整数将被转换为浮点数,结果为 NaN,对吗? (2认同)

Огњ*_*јић 8

注意C标准说(6.5.5):

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

因此,对于整数类型和浮点,未定义(按标准)/ 0.然而,大多数实现具有前面提到的行为(+ -INF或NAN).

  • 值得注意的是,至少在C语言中,如果实现声明支持[C标准附件F](https://www.python.org/dev/peps/pep-0366/)(可选),则附件F会覆盖6.5。 5用于浮点类型,并以零表示呈现浮点除法。我认为标准没有明确说明这一点,但是附件F中有几个部分指定了关于除零必须或不应该如何进行的事情。 (3认同)