結論から言います!
ARMアーキテクチャでは、ゼロ割(0除算)のエラーはおきません!
事の発端は!
@hamakendevelopさんのこの発言!
コレを偶然みて、そんなバカなぁ!
なんて思ってサンプルを作ったのが発端です!
まず、サンプルをMac OS Xで作ってみました!
結果は予想通り、
c = a / b;
のところで、Exception発生!
やっぱそうだよなぁ・・・
なんて思いつつ、一応、iOSのサンプルも作ってみました!
コレをiOSシミュレータで起動!
結果は予想通り、
NSLog(@"%d", a/b);
のところで、Exception発生!
そりゃそうだ!
と思って、同じソースコードをiPhone5にて動作させてみました。
ほんまや!
(明石家さんまさん風)
結果は予想に反して、iPhone5で例外が発生しませんでした!
うげ!
まじか!!!
なんて思っていたところ、
@sakiraさんが参戦!!!
ちょっと調べたところで、
と言った返信をした訳です。
あ!ちなみに、
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205hj/CJADECCJ.html
ここを添付しました。
この時点で、もう既に、かなりの時間になっていたので、一旦休憩(笑)
その次の日。
@sakiraさんから信じがたいツイートを頂いた訳です!
まじか!
AndroidでもJavaではなくて、Native C言語をコンパイルした
実行ファイルでは、エラーが発生せず、さらに、
iOSではsignal()でのハンドリングも効かないとのこと・・・
そんな・・・そんな・・・バカな・・・なんて調べ、
いろいろと議論したところ、以下のサイトに行き着きました!
http://blog.kmckk.com/archives/4047024.html
うっそ!!!
libgccでの事だったんだ!!!
Xcodeも元々はgccが発祥なので、可能性は多いにあるとの結論に
なりました!
サイトを参照するに、
・ARMには除算命令がない
ために、libgccで除算をするしかなく、libgcc内で除算を行っている。
とのことでした!!!
とりとめのない書き方になりましたが、結論通り、
ARMアーキテクチャは除算命令がないために、libgccで除算を
行っており、libgcc内で、raise()を行っていないため、
Exceptionが発生せず、そこでCPUがストップするため、
除算結果の変数を参照すると、不定になる!
と言った事がわかりました!
(推測も入ってますが^^;;;)
最後に、@sakiraさんの言葉がカッコいい!!!