3

計算された値を返す関数を SQL Server で実行しています。dbFit を使用して FitNesse で結果をテストすると、値が同じではないと主張します (下のスクリーンショットを参照)。

値は float として返され、2 つしか表示されていないにもかかわらず、すべての小数の比較で失敗します。比較する小数の範囲を制限する方法はありますか?

不一致の FitNesse 値

4

1 に答える 1

3

少なくとも厳密には比較しないでください。これは、バイナリ システムの不完全性によるものです。

float a = 0.15 + 0.15
float b = 0.1 + 0.2
if(a == b) // can be false!
if(a >= b) // can also be false!

実数の有効桁数は限られているため、実数を完全に格納することはできません。ほとんどの場合、エラーが発生します。バイナリで 0.1 を書いてみてください! 画面に表示されている 0.1 は、実際には近似値にすぎません。それは広大な主題であり、詳細については数値解析を行いたいと思うかもしれません。

より一般的な注意事項として、ここにいくつかの情報があります: http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

あなたの問題について:

~= (ほぼ等しい) を使用する必要があります。ここで詳細情報を見つけることができます: http://fitnesse.org/FitNesse.UserGuide.SliM.ValueComparisons

于 2012-09-26T08:02:21.060 に答える