階乗の計算。
PROGRAM factorial IMPLICIT NONE INTEGER :: i, ifac ifac = 1 DO i = 1, 20 ifac = ifac * i PRINT *, i, '!=', ifac END DO STOP END PROGRAM FACTORIAL
途中までは正しい結果を出しますが、13!から先は結果が狂っています。あまつさえ負の数まで出ています。これは何故でしょうか?
この問いは、教育的効果が大きいFortran入門の練習問題としてよく使われます。
これは整数の桁あふれ(Overflow)がおこったためです*1。
ここで0または正の2進法の表し方は知っているものとします。またコンピュータ内部では数が2進法で表されているというのは知っていると思います。
現在*2一般に使われている32bitコンピュータでは、4byte=32bit=32桁の2進数が処理単位になっています。この場合正の2進数ならば0からまでの整数を表せることになります。
では負の整数はコンピュータ内部において2進法でどのように表されているのしょうか。
(続く)