1

Matrix浮動小数点行列の数学演算(基本演算、逆行列など)を実行するクラスを作成しました。

浮動小数点の精度により、それらのテストが困難になります。通常、逆数演算をテストする場合、行列の行列式がゼロに近いと、エラーが大きくなる可能性があります。

これらの操作の単体テストを行うにはどうすればよいですか?

4

1 に答える 1

3

あなたの目標に応じて適切かもしれないいくつかのオプションがあります。

個々の出力要素ごとに、その要素に寄与する入力値に基づいて、その要素で許容されるエラーを設定できます。(行列を乗算してからその逆数を乗算するなどの複合演算の場合でも、最終値に寄与するすべての値に基づいて許容値を設定します。)

ゼロに近い行列式を持たないテスト用の入力行列を選択できます。

個々の要素の誤差を測定する代わりに、結果マトリックスが理想的な結果からの距離を計算し、その距離が許容誤差を超えているかどうかを判断できます。(たとえば、2つの行列を減算し、要素の2乗を合計し、平方根を取ります。行列操作における「距離」とエラーの他の概念については、このページを検討してください。)

テストの目的はエラーを見つけることであることに注意してください。これは、しきい値がバグによって引き起こされる可能性のある差異の大きさよりも小さい場合は、非常に大きなエラー許容度を使用しても問題がないことを示しています。つまり、コードで発生する可能性のあるバグの種類を考慮してください。間違った要素への参照、配列外の参照、操作の省略などです。一般に、これらのエラーは結果に非常に大きなエラーを引き起こします。テストでこれらのエラーが検出される限り、テストは目的を達成しています。

理想的には、操作を反転して元の入力と比較するのではなく、操作の計算結果を理想的な結果と比較します。理想的な結果が得られない場合は、拡張精度を使用して、より正確に計算された結果と比較できます。これが一般的に利用できない場合は、さまざまな場所(および他の場所ではゼロ)に少数の単純な要素(小さな整数など)しかない行列など、準備された行儀の良い行列のセットを使用して比較できます。各テストは、異なる入力マトリックスを使用して繰り返されるため、テストの組み合わせセットが必要なケースをカバーします。ただし、各テストには、丸め誤差がほとんどまたはまったく予想されない単純な出力があります。

于 2013-01-29T18:59:24.943 に答える