norimakihayateの日記

バーチャル旅日記からスタート。現在は私の国内旅行史に特化しています。

最初のバグ

f:id:norimakihayate:20150503110209j:plain

 昨日は西川口付近から浦和を過ぎ、さいたま新都心の手前、与野あたりまで到達した。

 

 私が最初に量産用に作ったプログラムは5バイト割る3バイトの割り算計算のサブルーチンだが、最初にバグを経験したプログラムでもある。プログラム名はDIV53と命名した。

 

 プログラムというものは開発中に一発で動くというのは勿論まれで、試行錯誤しながら作っていくのは通常だ。電光掲示板やテニスゲームでもそうだった。しかしこういう開発途中の動作不良はバグとは言わなかった。自分としてテストもして完成したと判断してから後に不具合が見つかる場合を私はバグと呼んでいた。

 

 割り算は割と単純なアルゴリズムで、プログラム製作後、開発装置で出来る簡便なテストで幾つか計算をさせてみて、確かに答えはあっている事を確認した。しかし、量産で使うものなので、念には念を入れて、使われる全数値でテストをしてみることにした。割られる数の5バイトというのは、2進数8桁の1バイトを5つ繋げたもので2の40乗、ゼロから1億ちょっと迄の数字を表せる。割る数の3バイトのほうは2の24乗、ゼロから1600万強の数字を扱える。それで割られる数をゼロから最大値の1億ちょっと迄一つずつ増やしながら、一つの割る数で全部計算し、その後答えに割る数を掛けて余りを足して割られる数にちゃんと戻るか検算するのだ。一つの割る数が終わったら、割る数の方も1ずつ増やしてまた同じ計算をさせ、割られる数、割る数の全ての組合せを割り算と検算をさせるようにしたのだ。答えが合えば次に進み、もし違っていたら警告を出して止まるように検査プログラムを作って仕掛けてみた。開発装置を24時間連続で動かして2日以上掛かる計算だった。それがやってみたら確か二日目ぐらいだったと思うが、突然止まったのだ。調べてみると、殆どの計算はあっていたのだが、ある数とある数の割り算の時だけ、桁上げだったか繰り下がりの処理が不適切だった為に答えが合わなかったのだった。

 

 この経験は衝撃的なものだった。プログラムは舐めてはならないという事を嫌というほど思い知らされたのだった。

 

 今日の画像はプログラム開発中の姿で、残っている数少ない写真だ。割り算計算作成の時のではないが、雰囲気は似ているので載せてみた。