2011-01-17 17 views
0

ソフトウェア開発者の立場でのプログラミングテスト中に同様の質問がありました。二日後、私はまだ答えがありません。Cでの単体テストを使用した修正

2つの浮動小数点を入力として受け取り、副作用がなく、確定的に実行する関数があるとします(単一スレッド環境も考慮してください)。例えば。 bool test(float arg1, float arg2);

これをテストするには、任意の数のランダム入力を使用するとします。この関数は非常にまれに失敗しますが、失敗します。我々はテストのコードのこの部分を使用することを言ってみましょう:

//Set a,b 
if(test(a,b)){ 
    printf("Test passed\n"); 
} else { 
    printf("%f %f\n", a,b); 
} 

ので、印刷された入力をキャプチャした後、我々はこのようなこれらの入力を使用します。

a = //Fill from the printf 
b = //Fill from the printf 

boolean a = test(a,b); 

の結果を検証した後、テストは有効/パスされます。あなたはどんな説明をしていますか?私はデバッグのためのprintfは難しいかもしれないが、それは私が尋ねられた質問だったことを知っている。

答えて

3

printf%f指定子は、実際よりも大きな印象を与えないように、7桁以上の10進数字を出力しません。

入力のうちの1つが、printfを介して出力された後、コンパイラによって読み込まれたときに、結果が若干異なるということでしょう。

2

aおよびbの値は、printfで印刷された値よりも有効数字が大きい可能性があります。したがって、これは正確な問題です。

関連する問題