生きている内に終わらない動作確認
大抵プログラマーは、作成したプログラムが
正しく動作しているか正確に確認してない。
例えば、「C = A + B」を確認するときは、
幾つか思いつく数値を入れて帰ってくる値を確認する。
「A=1/B=1」とか入れて「C=2」と返ってきたら
「ちゃんと動いてるやん。」と思う。
でも、「A=2147483647/B=1」のとき、「C=-1」に
なるのは、確認しない…。多分しない…。
もし確実に動作しているかを確認するのなら
2種類の方法を作成し結果を比較する形にするしかないが…
こいつが結構難しい。
例えば、「C = A + B」の動作を確認するには…
(CPUの動作確認のようだ…)
#include <stdio.h>
#include <time.h>
#define INT_MAX 0x7FFFFFFF
void main( void )
{
char tmpbuf[128];
int A, B, C;
double DA, DB, DC;
_strtime( tmpbuf );
printf( "開始:\t\t\t\t%s\n", tmpbuf );
for( A = 0 ; A < INT_MAX ; A++ )
{
for( B = 0 ; B < INT_MAX ; B++ )
{
C = A + B;
DA = A;
DB = B;
DC = DA + DB;
if( DC != ( double )C )
{
printf( "ちょっと違うよ!%f - %f\n", DC, ( double )C );
}
}
_strtime( tmpbuf );
printf( "経過(%d):\t\t\t\t%s\n", A, tmpbuf );
}
_strtime( tmpbuf );
printf( "終了:\t\t\t\t%s\n", tmpbuf );
}
ちなみに「for( b = 0 ; b < INT_MAX ; b++ )」ループの
ワンカウントにつき3分ほど掛かるので…
全てが終わるのに
6442450941分
107374182.3時間
4473924.2日
12257.3年?!
おお、生きているうちに終わらん…。
いくら長生きするつもりでも…
一万歳じゃあ既にミイラですよ…。<て、生きていないし。
いやその前にPCが壊れる!
絶対壊れる!
要するにものによっては、検証が不可能なのだ…。
まあ、人海ならぬPC海(?)で4473924.2台用意して
分散実行すれば一日で結果を出せるのだろうが…
安いPCでも一兆円ぐらい出せば揃うのか?
広さだって、東京都23区ぐらい必要…?
想像できん…。
つまり
プログラマーが作成した処理、つまりプログラムは、
正しく動くか確認または、検証が
出来ないこともある…。
(これを「プログラム原則の2」と…しよう…)
アレ?これでよかったんだっけ…?
| 固定リンク
コメント