割り算

初歩的といえばあまりにも初歩的な話ですが、割り算の話です。

CおよびCから派生した多くの言語では、割り算に「/」演算子を使用し、かつ「整数 / 整数」の型は整数型です。つまりたとえば以下のようなコードがあったとき、

int a = 10;
int b = 3;
double c = a / b;

Cに代入されるのは3.0になります。「整数 / 整数」の型は整数型ですから、「a / b」の値はこの時点で3であり、それをdoubleに代入しても3.3333…になるわけではありません。

こんなことは、中級者以上のプログラマにとっては常識の範疇のことかと思いますが、初心者はけっこうここでひっかかることがあります。ていうか私もひっかかりました。いや、実は組むプログラムのジャンルによってはこのあたりのことを長年迂回してきてしまうこともあるようで、10年選手がこれではまったのを見たこともあります。

その点、Pascalなどでは、「/」演算子は実数を返します。整数での除算を行いたければ「div」演算子を使用します。

crowbarやDiksamは、Cを踏襲した言語であるため、ここもまたCに合わせました。前述のように私自身これではまったことがあるので、実はちょっと迷ったのですけれど。そういやPerlでは、「print 10 / 3;」は「3.33333333333333」と表示しますね。

だからどうだという話でもないのですが、言語仕様の決定は妥協の繰り返しだという例のひとつとして。