21

長いシミュレーションを実行しています。結果をベクトルに記録して、データに関する統計を計算します。理論的には、これらのサンプルはゼロ除算の結果である可能性があることに気付きました。これはあくまでも理論上の話であり、そうではないことは確かです。コードを変更した後にシミュレーションを再実行するのを避けるために、その場合はどうなるのだろうと思っていました。0 による除算が発生したかどうかを認識できますか? エラーメッセージは表示されますか? (例外は現在処理されていません)。

ありがとう

4

4 に答える 4

50

IEEE float の場合、0 による有限の非ゼロ float の除算は明確に定義されており、+infinity (値が >zero の場合) または -infinity (値が 0 未満の場合) になります。0.0/0.0 の結果は NaN です。整数を使用する場合、動作は未定義です。

于 2011-01-20T09:25:54.100 に答える
9

C標準は(6.5.5)と言うことに注意してください:

/ 演算子の結果は、最初のオペランドを 2 番目のオペランドで割った商です。% 演算子の結果は剰余です。どちらの操作でも、2 番目のオペランドの値がゼロの場合、動作は未定義です。

そのため、something/0 は (標準では) 整数型と浮動小数点の両方で定義されていません。それにもかかわらず、ほとんどの実装では、前述の動作 (+-INF または NAN) があります。

于 2014-03-13T21:18:39.230 に答える
1

整数を話している場合、プログラムはゼロ除算でクラッシュするはずです。

フロートについて話している場合は、ゼロによる除算が許可され、その結果は INF または -INF になります。プログラムがクラッシュするか、それを適切に処理するか、未定義/予期しない結果で続行するかは、すべてコード次第です。

于 2011-01-20T09:27:49.697 に答える