📄 test_tr1.cpp
字号:
// (C) Copyright John Maddock 2008.// Use, modification and distribution are subject to the// Boost Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#include <boost/test/included/test_exec_monitor.hpp>#include <boost/test/floating_point_comparison.hpp>#include <boost/math/tools/precision.hpp>#include <math.h> // ldexpf#ifdef TEST_STD#include <cmath>namespace tr1 = std::tr1;#else#include <boost/math/tr1.hpp>namespace tr1 = boost::math::tr1;#endifvoid test_values(float, const char* name){ std::cout << "Testing type " << name << std::endl;#ifndef TEST_LD // // First the C99 math functions: // float eps = boost::math::tools::epsilon<float>(); BOOST_CHECK_CLOSE(tr1::acoshf(std::cosh(0.5f)), 0.5f, 5000 * eps); BOOST_CHECK_CLOSE(tr1::asinhf(std::sinh(0.5f)), 0.5f, 5000 * eps); BOOST_CHECK_CLOSE(tr1::atanhf(std::tanh(0.5f)), 0.5f, 5000 * eps); BOOST_CHECK_CLOSE(tr1::cbrtf(1.5f * 1.5f * 1.5f), 1.5f, 5000 * eps); BOOST_CHECK(tr1::copysignf(1.0f, 1.0f) == 1.0f); BOOST_CHECK(tr1::copysignf(1.0f, -1.0f) == -1.0f); BOOST_CHECK(tr1::copysignf(-1.0f, 1.0f) == 1.0f); BOOST_CHECK(tr1::copysignf(-1.0f, -1.0f) == -1.0f); BOOST_CHECK_CLOSE(tr1::erfcf(static_cast<float>(0.125)), static_cast<float>(0.85968379519866618260697055347837660181302041685015L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erfcf(static_cast<float>(0.5)), static_cast<float>(0.47950012218695346231725334610803547126354842424204L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erfcf(static_cast<float>(1)), static_cast<float>(0.15729920705028513065877936491739074070393300203370L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erfcf(static_cast<float>(5)), static_cast<float>(1.5374597944280348501883434853833788901180503147234e-12L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erfcf(static_cast<float>(-0.125)), static_cast<float>(1.1403162048013338173930294465216233981869795831498L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erfcf(static_cast<float>(-0.5)), static_cast<float>(1.5204998778130465376827466538919645287364515757580L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erfcf(static_cast<float>(0)), static_cast<float>(1), eps * 1000); BOOST_CHECK_CLOSE(tr1::erff(static_cast<float>(0.125)), static_cast<float>(0.14031620480133381739302944652162339818697958314985L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erff(static_cast<float>(0.5)), static_cast<float>(0.52049987781304653768274665389196452873645157575796L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erff(static_cast<float>(1)), static_cast<float>(0.84270079294971486934122063508260925929606699796630L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erff(static_cast<float>(5)), static_cast<float>(0.9999999999984625402055719651498116565146166211099L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erff(static_cast<float>(-0.125)), static_cast<float>(-0.14031620480133381739302944652162339818697958314985L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erff(static_cast<float>(-0.5)), static_cast<float>(-0.52049987781304653768274665389196452873645157575796L), eps * 1000); BOOST_CHECK_CLOSE(tr1::erff(static_cast<float>(0)), static_cast<float>(0), eps * 1000); BOOST_CHECK_CLOSE(tr1::log1pf(static_cast<float>(0.582029759883880615234375e0)), static_cast<float>(0.4587086807259736626531803258754840111707e0L), eps * 1000); BOOST_CHECK_CLOSE(tr1::expm1f(static_cast<float>(0.582029759883880615234375e0)), static_cast<float>(0.7896673415707786528734865994546559029663e0L), eps * 1000); BOOST_CHECK_CLOSE(tr1::log1pf(static_cast<float>(-0.2047410048544406890869140625e-1)), static_cast<float>(-0.2068660038044094868521052319477265955827e-1L), eps * 1000); BOOST_CHECK_CLOSE(tr1::expm1f(static_cast<float>(-0.2047410048544406890869140625e-1)), static_cast<float>(-0.2026592921724753704129022027337835687888e-1L), eps * 1000); BOOST_CHECK_EQUAL(tr1::fmaxf(0.1f, -0.1f), 0.1f); BOOST_CHECK_EQUAL(tr1::fminf(0.1f, -0.1f), -0.1f); BOOST_CHECK_CLOSE(tr1::hypotf(1.0f, 3.0f), std::sqrt(10.0f), eps * 500); BOOST_CHECK_CLOSE(tr1::lgammaf(static_cast<float>(3.5)), static_cast<float>(1.2009736023470742248160218814507129957702389154682L), 5000 * eps); BOOST_CHECK_CLOSE(tr1::lgammaf(static_cast<float>(0.125)), static_cast<float>(2.0194183575537963453202905211670995899482809521344L), 5000 * eps); BOOST_CHECK_CLOSE(tr1::lgammaf(static_cast<float>(-0.125)), static_cast<float>(2.1653002489051702517540619481440174064962195287626L), 5000 * eps); BOOST_CHECK_CLOSE(tr1::lgammaf(static_cast<float>(-3.125)), static_cast<float>(0.1543111276840418242676072830970532952413339012367L), 5000 * eps); BOOST_CHECK_CLOSE(tr1::lgammaf(static_cast<float>(-53249.0/1024)), static_cast<float>(-149.43323093420259741100038126078721302600128285894L), 5000 * eps); BOOST_CHECK_CLOSE(tr1::tgammaf(static_cast<float>(3.5)), static_cast<float>(3.3233509704478425511840640312646472177454052302295L), 5000 * eps); BOOST_CHECK_CLOSE(tr1::tgammaf(static_cast<float>(0.125)), static_cast<float>(7.5339415987976119046992298412151336246104195881491L), 5000 * eps); BOOST_CHECK_CLOSE(tr1::tgammaf(static_cast<float>(-0.125)), static_cast<float>(-8.7172188593831756100190140408231437691829605421405L), 5000 * eps); BOOST_CHECK_CLOSE(tr1::tgammaf(static_cast<float>(-3.125)), static_cast<float>(1.1668538708507675587790157356605097019141636072094L), 5000 * eps);#ifdef BOOST_HAS_LONG_LONG BOOST_CHECK(tr1::llroundf(2.5f) == 3LL); BOOST_CHECK(tr1::llroundf(2.25f) == 2LL);#endif BOOST_CHECK(tr1::lroundf(2.5f) == 3L); BOOST_CHECK(tr1::lroundf(2.25f) == 2L); BOOST_CHECK(tr1::roundf(2.5f) == 3.0f); BOOST_CHECK(tr1::roundf(2.25f) == 2.0f); BOOST_CHECK(tr1::nextafterf(1.0f, 2.0f) > 1.0f); BOOST_CHECK(tr1::nextafterf(1.0f, -2.0f) < 1.0f); BOOST_CHECK(tr1::nextafterf(tr1::nextafterf(1.0f, 2.0f), -2.0f) == 1.0f); BOOST_CHECK(tr1::nextafterf(tr1::nextafterf(1.0f, -2.0f), 2.0f) == 1.0f); BOOST_CHECK(tr1::nextafterf(1.0f, 2.0f) > 1.0f); BOOST_CHECK(tr1::nextafterf(1.0f, -2.0f) < 1.0f); BOOST_CHECK(tr1::nextafterf(tr1::nextafterf(1.0f, 2.0f), -2.0f) == 1.0f); BOOST_CHECK(tr1::nextafterf(tr1::nextafterf(1.0f, -2.0f), 2.0f) == 1.0f); BOOST_CHECK(tr1::truncf(2.5f) == 2.0f); BOOST_CHECK(tr1::truncf(2.25f) == 2.0f); // // And again but without the "f" suffix on the function names: // BOOST_CHECK_CLOSE(tr1::acosh(std::cosh(0.5f)), 0.5f, 5000 * eps); BOOST_CHECK_CLOSE(tr1::asinh(std::sinh(0.5f)), 0.5f, 5000 * eps); BOOST_CHECK_CLOSE(tr1::atanh(std::tanh(0.5f)), 0.5f, 5000 * eps); BOOST_CHECK_CLOSE(tr1::cbrt(1.5f * 1.5f * 1.5f), 1.5f, 5000 * eps); BOOST_CHECK(tr1::copysign(1.0f, 1.0f) == 1.0f); BOOST_CHECK(tr1::copysign(1.0f, -1.0f) == -1.0f);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -