記事一覧

ゼロ除算?

少し前に、メディアで「小学校教員が生徒に9 / 0 = 0と教えている?」みたいなことが話題になりました。
実際は間違いではありますが、いずれ学びなおすのであれば、そのような教え方もありといえばありなんじゃないかなあとも思います。

まあそれが適切か不適切かはおいておいて、先日ふと、0除算はプログラミングではどう扱われるのか?という疑問を抱きました。過去の経験では、C++は0除算で止まる、JavaScriptは止まらない、ということがわかっていましたが、今回、自分の主に使う言語について挙動をまとめてみました。

赤字は例外の発生&中断、青字は出力結果の値です。

Perl
my $a = 5;
my $b = 0;
print $a / $b;

Illegal division by zero

JavaScript
var a = 5;
var b = 0;
alert(a / b);

Infinity

ActionScript 3
var a:int = 5;
var b:int = 0;

trace(a / b);

Infinity

VB.NET
Dim a As Integer = 5
Dim b As Integer = 0

Console.WriteLine(a / b)

+∞

Visual C++
int a = 5;
int b = 0;
printf("%d",a / b);

Integer division by zero

Visual C#
int a = 5;
int b = 0;
Console.WriteLine(a / b);

System.DivideByZeroException
0 で除算しようとしました。

Java
int a = 5;
int b = 0;
System.out.println(a / b);

Exception in thread "main" java.lang.ArithmeticException: / by zero


結果、JavaScriptとActionScriptとVB.NETは処理が継続しましたが、他の言語は例外発生&中断ということがわかりました。
まあ、ゼロ除算が起こるようなコードは書くものではないと思いますが…

「不良の原因がゼロ除算だった」なんてかっこ悪いことの起こらないよう、頭の片隅に置いておくと良いかもしれません。

コメント

コメントの投稿

非公開コメント

プロフィール

JDB Luigi

Author:JDB Luigi
どこにでもいるようなありふれた人間・・・という訳でもなく、かと言って怪しい宗教を信仰する変人という訳でも無い。

基本的に掲載しているコード等は煮ていただいても焼いていただいても結構ですが、利用は自己責任にてお願いいします。
また、バグ・アドバイス等もしあればよろしくお願いします。