⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_erf.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void test_erf(T, const char* name){   //   // The actual test data is rather verbose, so it's in a separate file   //   // The contents are as follows, each row of data contains   // three items, input value a, input value b and erf(a, b):   //#  include "erf_small_data.ipp"   do_test_erf(erf_small_data, name, "Erf Function: Small Values");#  include "erf_data.ipp"   do_test_erf(erf_data, name, "Erf Function: Medium Values");#  include "erf_large_data.ipp"   do_test_erf(erf_large_data, name, "Erf Function: Large Values");#  include "erf_inv_data.ipp"   do_test_erf_inv(erf_inv_data, name, "Inverse Erf Function");#  include "erfc_inv_data.ipp"   do_test_erfc_inv(erfc_inv_data, name, "Inverse Erfc Function");#  include "erfc_inv_big_data.ipp"   if(std::numeric_limits<T>::min_exponent <= -4500)   {      do_test_erfc_inv(erfc_inv_big_data, name, "Inverse Erfc Function: extreme values");   }}template <class T>void test_spots(T, const char* t){   std::cout << "Testing basic sanity checks for type " << t << std::endl;   //   // basic sanity checks, tolerance is 10 epsilon expressed as a percentage:   //   T tolerance = boost::math::tools::epsilon<T>() * 1000;   BOOST_CHECK_CLOSE(::boost::math::erfc(static_cast<T>(0.125)), static_cast<T>(0.85968379519866618260697055347837660181302041685015L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erfc(static_cast<T>(0.5)), static_cast<T>(0.47950012218695346231725334610803547126354842424204L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erfc(static_cast<T>(1)), static_cast<T>(0.15729920705028513065877936491739074070393300203370L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erfc(static_cast<T>(5)), static_cast<T>(1.5374597944280348501883434853833788901180503147234e-12L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erfc(static_cast<T>(-0.125)), static_cast<T>(1.1403162048013338173930294465216233981869795831498L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erfc(static_cast<T>(-0.5)), static_cast<T>(1.5204998778130465376827466538919645287364515757580L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erfc(static_cast<T>(0)), static_cast<T>(1), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erf(static_cast<T>(0.125)), static_cast<T>(0.14031620480133381739302944652162339818697958314985L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erf(static_cast<T>(0.5)), static_cast<T>(0.52049987781304653768274665389196452873645157575796L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erf(static_cast<T>(1)), static_cast<T>(0.84270079294971486934122063508260925929606699796630L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erf(static_cast<T>(5)), static_cast<T>(0.9999999999984625402055719651498116565146166211099L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erf(static_cast<T>(-0.125)), static_cast<T>(-0.14031620480133381739302944652162339818697958314985L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erf(static_cast<T>(-0.5)), static_cast<T>(-0.52049987781304653768274665389196452873645157575796L), tolerance);   BOOST_CHECK_CLOSE(::boost::math::erf(static_cast<T>(0)), static_cast<T>(0), tolerance);   tolerance = boost::math::tools::epsilon<T>() * 100 * 200; // 200 eps %.#if defined(__CYGWIN__)   // some platforms long double is only reliably accurate to double precision:   if(sizeof(T) == sizeof(long double))      tolerance = boost::math::tools::epsilon<double>() * 100 * 200; // 200 eps %.#endif   for(T i = -0.95f; i < 1; i += 0.125f)   {      T inv = boost::math::erf_inv(i);      T b = boost::math::erf(inv);      BOOST_CHECK_CLOSE(b, i, tolerance);   }   for(T j = 0.125f; j < 2; j += 0.125f)   {      T inv = boost::math::erfc_inv(j);      T b = boost::math::erfc(inv);      BOOST_CHECK_CLOSE(b, j, tolerance);   }}int test_main(int, char* []){   BOOST_MATH_CONTROL_FP;   test_spots(0.0F, "float");   test_spots(0.0, "double");#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS   test_spots(0.0L, "long double");#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))   test_spots(boost::math::concepts::real_concept(0.1), "real_concept");#endif#endif   expected_results();   test_erf(0.1F, "float");   test_erf(0.1, "double");#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS   test_erf(0.1L, "long double");#ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))   test_erf(boost::math::concepts::real_concept(0.1), "real_concept");#endif#endif#else   std::cout << "<note>The long double tests have been disabled on this platform "      "either because the long double overloads of the usual math functions are "      "not available at all, or because they are too inaccurate for these tests "      "to pass.</note>" << std::cout;#endif   return 0;}/*Output:test_erf.cppCompiling manifest to resources...Linking...Embedding manifest...Autorun "i:\boost-06-05-03-1300\libs\math\test\Math_test\debug\test_erf.exe"Running 1 test case...Testing basic sanity checks for type floatTesting basic sanity checks for type doubleTesting basic sanity checks for type long doubleTesting basic sanity checks for type real_conceptTests run with Microsoft Visual C++ version 8.0, Dinkumware standard library version 405, Win32Testing Erf Function: Small Values with type float~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<float> Max = 0 RMS Mean=0boost::math::erfc<float> Max = 0 RMS Mean=0Testing Erf Function: Medium Values with type float~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<float> Max = 0 RMS Mean=0boost::math::erfc<float> Max = 0 RMS Mean=0Testing Erf Function: Large Values with type float~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<float> Max = 0 RMS Mean=0boost::math::erfc<float> Max = 0 RMS Mean=0Testing Inverse Erf Function with type float~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf_inv<float> Max = 0 RMS Mean=0Testing Inverse Erfc Function with type float~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erfc_inv<float> Max = 0 RMS Mean=0Testing Erf Function: Small Values with type double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<double> Max = 0 RMS Mean=0boost::math::erfc<double> Max = 0.7857 RMS Mean=0.06415    worst case at row: 149    { 0.3343, 0.3636, 0.6364 }Testing Erf Function: Medium Values with type double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<double> Max = 0.9219 RMS Mean=0.1016    worst case at row: 273    { 0.5252, 0.5424, 0.4576 }boost::math::erfc<double> Max = 1.08 RMS Mean=0.3224    worst case at row: 287    { 0.8461, 0.7685, 0.2315 }Testing Erf Function: Large Values with type double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<double> Max = 0 RMS Mean=0boost::math::erfc<double> Max = 1.048 RMS Mean=0.2032    worst case at row: 50    { 20.96, 1, 4.182e-193 }Testing Inverse Erf Function with type double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf_inv<double> Max = 1.124 RMS Mean=0.5082    worst case at row: 98    { 0.9881, 1.779 }Testing Inverse Erfc Function with type double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erfc_inv<double> Max = 1.124 RMS Mean=0.5006    worst case at row: 98    { 1.988, -1.779 }Testing Erf Function: Small Values with type long double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<long double> Max = 0 RMS Mean=0boost::math::erfc<long double> Max = 0.7857 RMS Mean=0.06415    worst case at row: 149    { 0.3343, 0.3636, 0.6364 }Testing Erf Function: Medium Values with type long double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<long double> Max = 0.9219 RMS Mean=0.1016    worst case at row: 273    { 0.5252, 0.5424, 0.4576 }boost::math::erfc<long double> Max = 1.08 RMS Mean=0.3224    worst case at row: 287    { 0.8461, 0.7685, 0.2315 }Testing Erf Function: Large Values with type long double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<long double> Max = 0 RMS Mean=0boost::math::erfc<long double> Max = 1.048 RMS Mean=0.2032    worst case at row: 50    { 20.96, 1, 4.182e-193 }Testing Inverse Erf Function with type long double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf_inv<long double> Max = 1.124 RMS Mean=0.5082    worst case at row: 98    { 0.9881, 1.779 }Testing Inverse Erfc Function with type long double~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erfc_inv<long double> Max = 1.124 RMS Mean=0.5006    worst case at row: 98    { 1.988, -1.779 }Testing Erf Function: Small Values with type real_concept~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<real_concept> Max = 1.271 RMS Mean=0.5381    worst case at row: 144    { 0.0109, 0.0123, 0.9877 }boost::math::erfc<real_concept> Max = 0.7857 RMS Mean=0.07777    worst case at row: 149    { 0.3343, 0.3636, 0.6364 }Testing Erf Function: Medium Values with type real_concept~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<real_concept> Max = 22.5 RMS Mean=4.224    worst case at row: 233    { -0.7852, -0.7332, 1.733 }Peak error greater than expected value of 20i:/boost-sandbox/math_toolkit/libs/math/test/handle_test_result.hpp(146): error in "test_main_caller( argc, argv )": check bounds.first >= max_error_found failedboost::math::erfc<real_concept> Max = 97.77 RMS Mean=8.373    worst case at row: 289    { 0.9849, 0.8363, 0.1637 }Peak error greater than expected value of 20i:/boost-sandbox/math_toolkit/libs/math/test/handle_test_result.hpp(146): error in "test_main_caller( argc, argv )": check bounds.first >= max_error_found failedMean error greater than expected value of 6i:/boost-sandbox/math_toolkit/libs/math/test/handle_test_result.hpp(151): error in "test_main_caller( argc, argv )": check bounds.second >= mean_error_found failedTesting Erf Function: Large Values with type real_concept~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf<real_concept> Max = 0 RMS Mean=0boost::math::erfc<real_concept> Max = 1.395 RMS Mean=0.2908    worst case at row: 11    { 10.99, 1, 1.87e-054 }Testing Inverse Erf Function with type real_concept~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erf_inv<real_concept> Max = 1.124 RMS Mean=0.5082    worst case at row: 98    { 0.9881, 1.779 }Testing Inverse Erfc Function with type real_concept~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~boost::math::erfc_inv<real_concept> Max = 1.124 RMS Mean=0.5006    worst case at row: 98    { 1.988, -1.779 }Test suite "Test Program" failed with:  181 assertions out of 184 passed  3 assertions out of 184 failed  1 test case out of 1 failed  Test case "test_main_caller( argc, argv )" failed with:    181 assertions out of 184 passed    3 assertions out of 184 failedBuild Time 0:15*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -