アカウント名:
パスワード:
ゼロ除算の結果は未定義だから、例外投げて死のうが何らかのデフォルト値を返そうがコンピューターが爆発しようが任意コードが実行されようが鼻から悪魔が出ようが仕様上は何の問題もない。チェックが不要になるわけではないが。むしろ例外が投げられると期待してチェックをサボってはいけない(実際にx86に慣れたプログラマーがARMデバイスでよく踏む罠)。
組み込みで例外を起こそうとしてゼロ除算をしたら、例外起きず結果が0になって困ったことがあった。
組み込みだと*((int*)0)=0とかも大丈夫だったりするからなぁ…# そもそも例外機構が存在するかどうかも怪しい世界
まあ0番地はブート用のROMだったりRAMだったりすることも多いので、0番地アクセスを禁止されると困るわけですが。
ちなみに、わたしが普段使っているコンパイラはゼロ除算は被除数がそのまま返ります。つまり1で割ったのと同じ結果ですね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
C言語なら (スコア:1)
ゼロ除算の結果は未定義だから、例外投げて死のうが何らかのデフォルト値を返そうがコンピューターが爆発しようが任意コードが実行されようが鼻から悪魔が出ようが仕様上は何の問題もない。チェックが不要になるわけではないが。むしろ例外が投げられると期待してチェックをサボってはいけない(実際にx86に慣れたプログラマーがARMデバイスでよく踏む罠)。
Re: (スコア:0)
組み込みで例外を起こそうとしてゼロ除算をしたら、例外起きず結果が0になって困ったことがあった。
Re: (スコア:0)
組み込みだと*((int*)0)=0とかも大丈夫だったりするからなぁ…
# そもそも例外機構が存在するかどうかも怪しい世界
Re:C言語なら (スコア:1)
まあ0番地はブート用のROMだったりRAMだったりすることも多いので、0番地アクセスを禁止されると困るわけですが。
ちなみに、わたしが普段使っているコンパイラはゼロ除算は被除数がそのまま返ります。
つまり1で割ったのと同じ結果ですね。