5

Boost::Test ライブラリを使用しており、実際のパーセント値が期待値に近いかどうかを確認しようとしています。

BOOST_CHECK_CLOSE_FRACTION(
    items[i].ExpectedPercent,
    items[i].ActualCount / totalCount,
    0.05);

何らかの理由で、値が十分に近い場合でも、このチェックは失敗します。

difference between items[i].ExpectedPercent{0.40000000000000002}
   and items[i].ActualCount / totalReturned{0.42999999999999999}
                                    exceeds 0.050000000000000003

これは Boost の問題ですか、それとも Boost の使用方法の問題ですか?

4

3 に答える 3

4

いくつかのテストの後、BOOST_CHECK_CLOSE_FRACTION のドキュメントが正しくないことが判明しました。許容値は、期待値の一部として指定する必要があります。

だから、TFAE:

BOOST_CHECK(abs(x - y) < (min(x, y) * 0.1));
BOOST_CHECK_CLOSE(x, y, 10);
BOOST_CHECK_CLOSE_FRACTION(x, y, 0.1);
于 2010-01-21T23:46:04.087 に答える
2

ブーストの使い方に問題があります。

最後の引数はパーセント許容値であり、絶対分散値ではありません。0.4の5%は0.02です。

于 2010-01-21T23:20:17.167 に答える