// (C) Copyright John Maddock 2006-7. // 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) #ifndef BOOST_MATH_TEST_RATIONAL_HPP #define BOOST_MATH_TEST_RATIONAL_HPP #include #include #include #include #include template void do_test_spots1(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Everything past this point is generated by the program // ../tools/generate_rational_test.cpp // // // Polynomials of order 0 // static const U n1c[1] = { 2 }; static const boost::array n1a = {{ 2 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(0.125), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(0.25), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(0.75), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(1.0f - 1.0f/64.0f), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(6.5), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(10247.25), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(0.125)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(0.25)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(0.75)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(6.5)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast(10247.25)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast(0.125)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast(0.25)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast(0.75)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast(6.5)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast(10247.25)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(0.125), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(0.25), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(0.75), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(1.0f - 1.0f/64.0f), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(6.5f), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(10247.25f), 1), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(0.125)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(0.25)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(0.75)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(6.5f)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast(10247.25f)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast(0.125)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast(0.25)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast(0.75)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast(6.5f)), static_cast(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast(10247.25f)), static_cast(0.2e1L), tolerance); // // Rational functions of order 0 // static const U d1c[1] = { 3 }; static const boost::array d1a = {{ 3 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(0.125), 1), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(0.25), 1), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(0.75), 1), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(1.0f - 1.0f/64.0f), 1), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(6.5f), 1), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(10247.25f), 1), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(0.125)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(0.25)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(0.75)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(6.5f)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast(10247.25f)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast(0.125)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast(0.25)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast(0.75)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast(6.5f)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast(10247.25f)), static_cast(0.6666666666666666666666666666666666666667e0L), tolerance); // // Polynomials of order 1 // static const U n2c[2] = { 3, 1 }; static const boost::array n2a = {{ 3, 1 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(0.125), 2), static_cast(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(0.25), 2), static_cast(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(0.75), 2), static_cast(0.375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(1.0f - 1.0f/64.0f), 2), static_cast(0.3984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(6.5), 2), static_cast(0.95e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(10247.25), 2), static_cast(0.1025025e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(0.125)), static_cast(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(0.25)), static_cast(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(0.75)), static_cast(0.375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(6.5)), static_cast(0.95e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast(10247.25)), static_cast(0.1025025e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast(0.125)), static_cast(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast(0.25)), static_cast(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast(0.75)), static_cast(0.375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast(6.5)), static_cast(0.95e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast(10247.25)), static_cast(0.1025025e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(0.125), 2), static_cast(0.3015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(0.25), 2), static_cast(0.30625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(0.75), 2), static_cast(0.35625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(1.0f - 1.0f/64.0f), 2), static_cast(0.3968994140625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(6.5f), 2), static_cast(0.4525e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(10247.25f), 2), static_cast(0.1050061355625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(0.125)), static_cast(0.3015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(0.25)), static_cast(0.30625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(0.75)), static_cast(0.35625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3968994140625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(6.5f)), static_cast(0.4525e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2c, static_cast(10247.25f)), static_cast(0.1050061355625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2a, static_cast(0.125)), static_cast(0.3015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2a, static_cast(0.25)), static_cast(0.30625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2a, static_cast(0.75)), static_cast(0.35625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3968994140625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2a, static_cast(6.5f)), static_cast(0.4525e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n2a, static_cast(10247.25f)), static_cast(0.1050061355625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(0.125), 2), static_cast(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(0.25), 2), static_cast(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(0.75), 2), static_cast(0.375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(1.0f - 1.0f/64.0f), 2), static_cast(0.3984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(6.5f), 2), static_cast(0.95e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(10247.25f), 2), static_cast(0.1025025e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(0.125)), static_cast(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(0.25)), static_cast(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(0.75)), static_cast(0.375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(6.5f)), static_cast(0.95e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2c, static_cast(10247.25f)), static_cast(0.1025025e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2a, static_cast(0.125)), static_cast(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2a, static_cast(0.25)), static_cast(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2a, static_cast(0.75)), static_cast(0.375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2a, static_cast(6.5f)), static_cast(0.95e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n2a, static_cast(10247.25f)), static_cast(0.1025025e5L), tolerance); // // Rational functions of order 1 // static const U d2c[2] = { 5, 9 }; static const boost::array d2a = {{ 5, 9 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(0.125), 2), static_cast(0.5102040816326530612244897959183673469388e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(0.25), 2), static_cast(0.4482758620689655172413793103448275862069e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(0.75), 2), static_cast(0.3191489361702127659574468085106382978723e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(1.0f - 1.0f/64.0f), 2), static_cast(0.2874859075535512965050732807215332581736e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(6.5f), 2), static_cast(0.1496062992125984251968503937007874015748e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(10247.25f), 2), static_cast(0.1111376148281068304596377002122405609873e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(0.125)), static_cast(0.5102040816326530612244897959183673469388e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(0.25)), static_cast(0.4482758620689655172413793103448275862069e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(0.75)), static_cast(0.3191489361702127659574468085106382978723e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.2874859075535512965050732807215332581736e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(6.5f)), static_cast(0.1496062992125984251968503937007874015748e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2c, d2c, static_cast(10247.25f)), static_cast(0.1111376148281068304596377002122405609873e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2a, d2a, static_cast(0.125)), static_cast(0.5102040816326530612244897959183673469388e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2a, d2a, static_cast(0.25)), static_cast(0.4482758620689655172413793103448275862069e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2a, d2a, static_cast(0.75)), static_cast(0.3191489361702127659574468085106382978723e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2a, d2a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.2874859075535512965050732807215332581736e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2a, d2a, static_cast(6.5f)), static_cast(0.1496062992125984251968503937007874015748e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n2a, d2a, static_cast(10247.25f)), static_cast(0.1111376148281068304596377002122405609873e0L), tolerance); } template void do_test_spots2(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 2 // static const U n3c[3] = { 10, 6, 11 }; static const boost::array n3a = {{ 10, 6, 11 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(0.125), 3), static_cast(0.10921875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(0.25), 3), static_cast(0.121875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(0.75), 3), static_cast(0.206875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(1.0f - 1.0f/64.0f), 3), static_cast(0.26565185546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(6.5), 3), static_cast(0.51375e3L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(10247.25), 3), static_cast(0.11551289516875e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(0.125)), static_cast(0.10921875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(0.25)), static_cast(0.121875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(0.75)), static_cast(0.206875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.26565185546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(6.5)), static_cast(0.51375e3L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3c, static_cast(10247.25)), static_cast(0.11551289516875e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3a, static_cast(0.125)), static_cast(0.10921875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3a, static_cast(0.25)), static_cast(0.121875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3a, static_cast(0.75)), static_cast(0.206875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.26565185546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3a, static_cast(6.5)), static_cast(0.51375e3L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n3a, static_cast(10247.25)), static_cast(0.11551289516875e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(0.125), 3), static_cast(0.10096435546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(0.25), 3), static_cast(0.1041796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(0.75), 3), static_cast(0.1685546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(1.0f - 1.0f/64.0f), 3), static_cast(0.26142410933971405029296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(6.5f), 3), static_cast(0.198991875e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(10247.25f), 3), static_cast(0.12128916726310335635546875e18L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(0.125)), static_cast(0.10096435546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(0.25)), static_cast(0.1041796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(0.75)), static_cast(0.1685546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.26142410933971405029296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(6.5f)), static_cast(0.198991875e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3c, static_cast(10247.25f)), static_cast(0.12128916726310335635546875e18L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3a, static_cast(0.125)), static_cast(0.10096435546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3a, static_cast(0.25)), static_cast(0.1041796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3a, static_cast(0.75)), static_cast(0.1685546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.26142410933971405029296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3a, static_cast(6.5f)), static_cast(0.198991875e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n3a, static_cast(10247.25f)), static_cast(0.12128916726310335635546875e18L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(0.125), 3), static_cast(0.10771484375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(0.25), 3), static_cast(0.11671875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(0.75), 3), static_cast(0.19140625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(1.0f - 1.0f/64.0f), 3), static_cast(0.26398639678955078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(6.5f), 3), static_cast(0.3069875e4L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(10247.25f), 3), static_cast(0.11836265072405359375e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(0.125)), static_cast(0.10771484375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(0.25)), static_cast(0.11671875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(0.75)), static_cast(0.19140625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.26398639678955078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(6.5f)), static_cast(0.3069875e4L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3c, static_cast(10247.25f)), static_cast(0.11836265072405359375e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3a, static_cast(0.125)), static_cast(0.10771484375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3a, static_cast(0.25)), static_cast(0.11671875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3a, static_cast(0.75)), static_cast(0.19140625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.26398639678955078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3a, static_cast(6.5f)), static_cast(0.3069875e4L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n3a, static_cast(10247.25f)), static_cast(0.11836265072405359375e14L), tolerance); // // Rational functions of order 2 // static const U d3c[3] = { 3, 4, 10 }; static const boost::array d3a = {{ 3, 4, 10 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(0.125), 3), static_cast(0.2987179487179487179487179487179487179487e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(0.25), 3), static_cast(0.2635135135135135135135135135135135135135e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(0.75), 3), static_cast(0.1779569892473118279569892473118279569892e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(1.0f - 1.0f/64.0f), 3), static_cast(0.1597671277126831703520981998649164537633e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(6.5f), 3), static_cast(0.1137873754152823920265780730897009966777e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(10247.25f), 3), static_cast(0.1100015619716026431429617996316152069115e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(0.125)), static_cast(0.2987179487179487179487179487179487179487e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(0.25)), static_cast(0.2635135135135135135135135135135135135135e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(0.75)), static_cast(0.1779569892473118279569892473118279569892e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1597671277126831703520981998649164537633e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(6.5f)), static_cast(0.1137873754152823920265780730897009966777e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3c, d3c, static_cast(10247.25f)), static_cast(0.1100015619716026431429617996316152069115e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3a, d3a, static_cast(0.125)), static_cast(0.2987179487179487179487179487179487179487e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3a, d3a, static_cast(0.25)), static_cast(0.2635135135135135135135135135135135135135e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3a, d3a, static_cast(0.75)), static_cast(0.1779569892473118279569892473118279569892e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3a, d3a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1597671277126831703520981998649164537633e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3a, d3a, static_cast(6.5f)), static_cast(0.1137873754152823920265780730897009966777e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n3a, d3a, static_cast(10247.25f)), static_cast(0.1100015619716026431429617996316152069115e1L), tolerance); } template void do_test_spots3(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 3 // static const U n4c[4] = { 1, 4, 9, 11 }; static const boost::array n4a = {{ 1, 4, 9, 11 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(0.125), 4), static_cast(0.1662109375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(0.25), 4), static_cast(0.2734375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(0.75), 4), static_cast(0.13703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(1.0f - 1.0f/64.0f), 4), static_cast(0.24150836944580078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(6.5), 4), static_cast(0.3428125e4L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(10247.25), 4), static_cast(0.11837210107094921875e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(0.125)), static_cast(0.1662109375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(0.25)), static_cast(0.2734375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(0.75)), static_cast(0.13703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.24150836944580078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(6.5)), static_cast(0.3428125e4L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4c, static_cast(10247.25)), static_cast(0.11837210107094921875e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4a, static_cast(0.125)), static_cast(0.1662109375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4a, static_cast(0.25)), static_cast(0.2734375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4a, static_cast(0.75)), static_cast(0.13703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.24150836944580078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4a, static_cast(6.5)), static_cast(0.3428125e4L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n4a, static_cast(10247.25)), static_cast(0.11837210107094921875e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(0.125), 4), static_cast(0.1064739227294921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(0.25), 4), static_cast(0.1287841796875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(0.75), 4), static_cast(0.8055419921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(1.0f - 1.0f/64.0f), 4), static_cast(0.23334727106775972060859203338623046875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(6.5f), 4), static_cast(0.845843359375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(10247.25f), 4), static_cast(0.12736106409103529349764202508544921875e26L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(0.125)), static_cast(0.1064739227294921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(0.25)), static_cast(0.1287841796875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(0.75)), static_cast(0.8055419921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.23334727106775972060859203338623046875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(6.5f)), static_cast(0.845843359375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4c, static_cast(10247.25f)), static_cast(0.12736106409103529349764202508544921875e26L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4a, static_cast(0.125)), static_cast(0.1064739227294921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4a, static_cast(0.25)), static_cast(0.1287841796875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4a, static_cast(0.75)), static_cast(0.8055419921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.23334727106775972060859203338623046875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4a, static_cast(6.5f)), static_cast(0.845843359375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n4a, static_cast(10247.25f)), static_cast(0.12736106409103529349764202508544921875e26L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(0.125), 4), static_cast(0.1517913818359375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(0.25), 4), static_cast(0.21513671875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(0.75), 4), static_cast(0.104072265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(1.0f - 1.0f/64.0f), 4), static_cast(0.23689246584661304950714111328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(6.5f), 4), static_cast(0.13013059375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(10247.25f), 4), static_cast(0.12428804224649080826343115234375e22L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(0.125)), static_cast(0.1517913818359375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(0.25)), static_cast(0.21513671875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(0.75)), static_cast(0.104072265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.23689246584661304950714111328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(6.5f)), static_cast(0.13013059375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4c, static_cast(10247.25f)), static_cast(0.12428804224649080826343115234375e22L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4a, static_cast(0.125)), static_cast(0.1517913818359375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4a, static_cast(0.25)), static_cast(0.21513671875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4a, static_cast(0.75)), static_cast(0.104072265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.23689246584661304950714111328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4a, static_cast(6.5f)), static_cast(0.13013059375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n4a, static_cast(10247.25f)), static_cast(0.12428804224649080826343115234375e22L), tolerance); // // Rational functions of order 3 // static const U d4c[4] = { 10, 2, 5, 4 }; static const boost::array d4a = {{ 10, 2, 5, 4 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(0.125), 4), static_cast(0.1608087679516250944822373393801965230537e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(0.25), 4), static_cast(0.2514367816091954022988505747126436781609e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(0.75), 4), static_cast(0.8564453125e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(1.0f - 1.0f/64.0f), 4), static_cast(0.1170714951947222939292918160495461743806e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(6.5f), 4), static_cast(0.2572219095854436315888201087975989495404e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(10247.25f), 4), static_cast(0.2749884125808399380227005558292823797886e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(0.125)), static_cast(0.1608087679516250944822373393801965230537e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(0.25)), static_cast(0.2514367816091954022988505747126436781609e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(0.75)), static_cast(0.8564453125e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1170714951947222939292918160495461743806e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(6.5f)), static_cast(0.2572219095854436315888201087975989495404e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4c, d4c, static_cast(10247.25f)), static_cast(0.2749884125808399380227005558292823797886e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4a, d4a, static_cast(0.125)), static_cast(0.1608087679516250944822373393801965230537e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4a, d4a, static_cast(0.25)), static_cast(0.2514367816091954022988505747126436781609e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4a, d4a, static_cast(0.75)), static_cast(0.8564453125e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4a, d4a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1170714951947222939292918160495461743806e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4a, d4a, static_cast(6.5f)), static_cast(0.2572219095854436315888201087975989495404e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n4a, d4a, static_cast(10247.25f)), static_cast(0.2749884125808399380227005558292823797886e1L), tolerance); } template void do_test_spots4(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 4 // static const U n5c[5] = { 10, 10, 4, 11, 9 }; static const boost::array n5a = {{ 10, 10, 4, 11, 9 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(0.125), 5), static_cast(0.11336181640625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(0.25), 5), static_cast(0.1295703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(0.75), 5), static_cast(0.2723828125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(1.0f - 1.0f/64.0f), 5), static_cast(0.42662663042545318603515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(6.5), 5), static_cast(0.193304375e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(10247.25), 5), static_cast(0.9924842756673782995703125e17L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(0.125)), static_cast(0.11336181640625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(0.25)), static_cast(0.1295703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(0.75)), static_cast(0.2723828125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.42662663042545318603515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(6.5)), static_cast(0.193304375e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5c, static_cast(10247.25)), static_cast(0.9924842756673782995703125e17L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5a, static_cast(0.125)), static_cast(0.11336181640625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5a, static_cast(0.25)), static_cast(0.1295703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5a, static_cast(0.75)), static_cast(0.2723828125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.42662663042545318603515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5a, static_cast(6.5)), static_cast(0.193304375e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n5a, static_cast(10247.25)), static_cast(0.9924842756673782995703125e17L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(0.125), 5), static_cast(0.10157269060611724853515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(0.25), 5), static_cast(0.106434478759765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(0.75), 5), static_cast(0.197494049072265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(1.0f - 1.0f/64.0f), 5), static_cast(0.4138858164296656028113829961512237787247e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(6.5f), 5), static_cast(0.2951521370703125e8L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(10247.25f), 5), static_cast(0.1094211231602999407223950000397888253311e34L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(0.125)), static_cast(0.10157269060611724853515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(0.25)), static_cast(0.106434478759765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(0.75)), static_cast(0.197494049072265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4138858164296656028113829961512237787247e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(6.5f)), static_cast(0.2951521370703125e8L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5c, static_cast(10247.25f)), static_cast(0.1094211231602999407223950000397888253311e34L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5a, static_cast(0.125)), static_cast(0.10157269060611724853515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5a, static_cast(0.25)), static_cast(0.106434478759765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5a, static_cast(0.75)), static_cast(0.197494049072265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4138858164296656028113829961512237787247e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5a, static_cast(6.5f)), static_cast(0.2951521370703125e8L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n5a, static_cast(10247.25f)), static_cast(0.1094211231602999407223950000397888253311e34L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(0.125), 5), static_cast(0.11258152484893798828125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(0.25), 5), static_cast(0.1257379150390625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(0.75), 5), static_cast(0.2299920654296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(1.0f - 1.0f/64.0f), 5), static_cast(0.4188681309761682314274366945028305053711e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(6.5f), 5), static_cast(0.45408105703125e7L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(10247.25f), 5), static_cast(0.106780963829612765105169679718983215332e30L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(0.125)), static_cast(0.11258152484893798828125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(0.25)), static_cast(0.1257379150390625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(0.75)), static_cast(0.2299920654296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4188681309761682314274366945028305053711e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(6.5f)), static_cast(0.45408105703125e7L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5c, static_cast(10247.25f)), static_cast(0.106780963829612765105169679718983215332e30L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5a, static_cast(0.125)), static_cast(0.11258152484893798828125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5a, static_cast(0.25)), static_cast(0.1257379150390625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5a, static_cast(0.75)), static_cast(0.2299920654296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4188681309761682314274366945028305053711e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5a, static_cast(6.5f)), static_cast(0.45408105703125e7L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n5a, static_cast(10247.25f)), static_cast(0.106780963829612765105169679718983215332e30L), tolerance); // // Rational functions of order 4 // static const U d5c[5] = { 6, 9, 6, 2, 5 }; static const boost::array d5a = {{ 6, 9, 6, 2, 5 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(0.125), 5), static_cast(0.1569265605461489066882963263374902835513e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(0.25), 5), static_cast(0.1493471409275101305718144979738856371004e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(0.75), 5), static_cast(0.1468309117708991366603495472731101284481e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(1.0f - 1.0f/64.0f), 5), static_cast(0.1564121691159921277310988862398683772017e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(6.5f), 5), static_cast(0.1973991741181125982091000185089449263153e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(10247.25f), 5), static_cast(0.1800144410401676792233921448870747965702e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(0.125)), static_cast(0.1569265605461489066882963263374902835513e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(0.25)), static_cast(0.1493471409275101305718144979738856371004e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(0.75)), static_cast(0.1468309117708991366603495472731101284481e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1564121691159921277310988862398683772017e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(6.5f)), static_cast(0.1973991741181125982091000185089449263153e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5c, d5c, static_cast(10247.25f)), static_cast(0.1800144410401676792233921448870747965702e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5a, d5a, static_cast(0.125)), static_cast(0.1569265605461489066882963263374902835513e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5a, d5a, static_cast(0.25)), static_cast(0.1493471409275101305718144979738856371004e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5a, d5a, static_cast(0.75)), static_cast(0.1468309117708991366603495472731101284481e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5a, d5a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1564121691159921277310988862398683772017e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5a, d5a, static_cast(6.5f)), static_cast(0.1973991741181125982091000185089449263153e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n5a, d5a, static_cast(10247.25f)), static_cast(0.1800144410401676792233921448870747965702e1L), tolerance); } template void do_test_spots5(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 5 // static const U n6c[6] = { 6, 8, 12, 5, 7, 5 }; static const boost::array n6a = {{ 6, 8, 12, 5, 7, 5 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(0.125), 6), static_cast(0.7199127197265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(0.25), 6), static_cast(0.88603515625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(0.75), 6), static_cast(0.242607421875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(1.0f - 1.0f/64.0f), 6), static_cast(0.41466238017193973064422607421875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(6.5), 6), static_cast(0.7244809375e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(10247.25), 6), static_cast(0.5650228315695522094919501953125e21L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(0.125)), static_cast(0.7199127197265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(0.25)), static_cast(0.88603515625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(0.75)), static_cast(0.242607421875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.41466238017193973064422607421875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(6.5)), static_cast(0.7244809375e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6c, static_cast(10247.25)), static_cast(0.5650228315695522094919501953125e21L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6a, static_cast(0.125)), static_cast(0.7199127197265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6a, static_cast(0.25)), static_cast(0.88603515625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6a, static_cast(0.75)), static_cast(0.242607421875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.41466238017193973064422607421875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6a, static_cast(6.5)), static_cast(0.7244809375e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n6a, static_cast(10247.25)), static_cast(0.5650228315695522094919501953125e21L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(0.125), 6), static_cast(0.6127949182875454425811767578125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(0.25), 6), static_cast(0.654820728302001953125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(0.75), 6), static_cast(0.1616912555694580078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(1.0f - 1.0f/64.0f), 6), static_cast(0.4001137167344577683526091194110563264985e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(6.5f), 6), static_cast(0.6958411633369140625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(0.125)), static_cast(0.6127949182875454425811767578125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(0.25)), static_cast(0.654820728302001953125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(0.75)), static_cast(0.1616912555694580078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4001137167344577683526091194110563264985e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6c, static_cast(6.5f)), static_cast(0.6958411633369140625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6a, static_cast(0.125)), static_cast(0.6127949182875454425811767578125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6a, static_cast(0.25)), static_cast(0.654820728302001953125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6a, static_cast(0.75)), static_cast(0.1616912555694580078125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4001137167344577683526091194110563264985e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n6a, static_cast(6.5f)), static_cast(0.6958411633369140625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(0.125), 6), static_cast(0.7023593463003635406494140625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(0.25), 6), static_cast(0.8192829132080078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(0.75), 6), static_cast(0.19558834075927734375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(1.0f - 1.0f/64.0f), 6), static_cast(0.4055123471588142408661425974969461094588e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(6.5f), 6), static_cast(0.107052491744140625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(10247.25f), 6), static_cast(0.6229253367792843599034768117351560896265e37L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(0.125)), static_cast(0.7023593463003635406494140625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(0.25)), static_cast(0.8192829132080078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(0.75)), static_cast(0.19558834075927734375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4055123471588142408661425974969461094588e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(6.5f)), static_cast(0.107052491744140625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6c, static_cast(10247.25f)), static_cast(0.6229253367792843599034768117351560896265e37L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6a, static_cast(0.125)), static_cast(0.7023593463003635406494140625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6a, static_cast(0.25)), static_cast(0.8192829132080078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6a, static_cast(0.75)), static_cast(0.19558834075927734375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4055123471588142408661425974969461094588e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6a, static_cast(6.5f)), static_cast(0.107052491744140625e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n6a, static_cast(10247.25f)), static_cast(0.6229253367792843599034768117351560896265e37L), tolerance); // // Rational functions of order 5 // static const U d6c[6] = { 5, 11, 7, 12, 10, 5 }; static const boost::array d6a = {{ 5, 11, 7, 12, 10, 5 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(0.125), 6), static_cast(0.1105787665293227020667219792530925829572e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(0.25), 6), static_cast(0.1052430112515949425820670455863588910799e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(0.75), 6), static_cast(0.9120378868534087154447666948125848966555e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(1.0f - 1.0f/64.0f), 6), static_cast(0.8626539746676637108178973543021882567334e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(6.5f), 6), static_cast(0.9109197333022141385660730837432462113756e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(10247.25f), 6), static_cast(0.9999414458034701919327379302959430043671e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(0.125)), static_cast(0.1105787665293227020667219792530925829572e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(0.25)), static_cast(0.1052430112515949425820670455863588910799e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(0.75)), static_cast(0.9120378868534087154447666948125848966555e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8626539746676637108178973543021882567334e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(6.5f)), static_cast(0.9109197333022141385660730837432462113756e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6c, d6c, static_cast(10247.25f)), static_cast(0.9999414458034701919327379302959430043671e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6a, d6a, static_cast(0.125)), static_cast(0.1105787665293227020667219792530925829572e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6a, d6a, static_cast(0.25)), static_cast(0.1052430112515949425820670455863588910799e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6a, d6a, static_cast(0.75)), static_cast(0.9120378868534087154447666948125848966555e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6a, d6a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8626539746676637108178973543021882567334e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6a, d6a, static_cast(6.5f)), static_cast(0.9109197333022141385660730837432462113756e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n6a, d6a, static_cast(10247.25f)), static_cast(0.9999414458034701919327379302959430043671e0L), tolerance); } template void do_test_spots6(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 6 // static const U n7c[7] = { 3, 4, 11, 5, 10, 7, 9 }; static const boost::array n7a = {{ 3, 4, 11, 5, 10, 7, 9 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(0.125), 7), static_cast(0.3684329986572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(0.25), 7), static_cast(0.4813720703125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(0.75), 7), static_cast(0.20723876953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(1.0f - 1.0f/64.0f), 7), static_cast(0.46413680258337990380823612213134765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(6.5), 7), static_cast(0.779707859375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(10247.25), 7), static_cast(0.10421241651331160693970241510986328125e26L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(0.125)), static_cast(0.3684329986572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(0.25)), static_cast(0.4813720703125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(0.75)), static_cast(0.20723876953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.46413680258337990380823612213134765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(6.5)), static_cast(0.779707859375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7c, static_cast(10247.25)), static_cast(0.10421241651331160693970241510986328125e26L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7a, static_cast(0.125)), static_cast(0.3684329986572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7a, static_cast(0.25)), static_cast(0.4813720703125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7a, static_cast(0.75)), static_cast(0.20723876953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.46413680258337990380823612213134765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7a, static_cast(6.5)), static_cast(0.779707859375e6L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n7a, static_cast(10247.25)), static_cast(0.10421241651331160693970241510986328125e26L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(0.125), 7), static_cast(0.3065205223058001138269901275634765625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(0.25), 7), static_cast(0.3294349253177642822265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(0.75), 7), static_cast(0.11300772249698638916015625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(1.0f - 1.0f/64.0f), 7), static_cast(0.4400013192129567626077980251194602528964e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(6.5f), 7), static_cast(0.52166734985505126953125e11L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(0.125)), static_cast(0.3065205223058001138269901275634765625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(0.25)), static_cast(0.3294349253177642822265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(0.75)), static_cast(0.11300772249698638916015625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4400013192129567626077980251194602528964e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7c, static_cast(6.5f)), static_cast(0.52166734985505126953125e11L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7a, static_cast(0.125)), static_cast(0.3065205223058001138269901275634765625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7a, static_cast(0.25)), static_cast(0.3294349253177642822265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7a, static_cast(0.75)), static_cast(0.11300772249698638916015625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4400013192129567626077980251194602528964e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n7a, static_cast(6.5f)), static_cast(0.52166734985505126953125e11L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(0.125), 7), static_cast(0.3521641784464009106159210205078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(0.25), 7), static_cast(0.41773970127105712890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(0.75), 7), static_cast(0.140676963329315185546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(1.0f - 1.0f/64.0f), 7), static_cast(0.4465092766607814731253821207562770823074e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(6.5f), 7), static_cast(0.802565153877001953125e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(0.125)), static_cast(0.3521641784464009106159210205078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(0.25)), static_cast(0.41773970127105712890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(0.75)), static_cast(0.140676963329315185546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4465092766607814731253821207562770823074e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7c, static_cast(6.5f)), static_cast(0.802565153877001953125e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7a, static_cast(0.125)), static_cast(0.3521641784464009106159210205078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7a, static_cast(0.25)), static_cast(0.41773970127105712890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7a, static_cast(0.75)), static_cast(0.140676963329315185546875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4465092766607814731253821207562770823074e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n7a, static_cast(6.5f)), static_cast(0.802565153877001953125e10L), tolerance); // // Rational functions of order 6 // static const U d7c[7] = { 2, 8, 10, 8, 1, 11, 1 }; static const boost::array d7a = {{ 2, 8, 10, 8, 1, 11, 1 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(0.125), 7), static_cast(0.1161348466465698540596242849979738853664e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(0.25), 7), static_cast(0.1010247476558897371522262642824204539632e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(0.75), 7), static_cast(0.103079575951134804308491906398377636644e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(1.0f - 1.0f/64.0f), 7), static_cast(0.1183671559390403425417413542214181025989e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(6.5f), 7), static_cast(0.3757457624476840396478985178609736319955e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(10247.25f), 7), static_cast(0.8991031618241406513349732955332873069556e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(0.125)), static_cast(0.1161348466465698540596242849979738853664e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(0.25)), static_cast(0.1010247476558897371522262642824204539632e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(0.75)), static_cast(0.103079575951134804308491906398377636644e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1183671559390403425417413542214181025989e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(6.5f)), static_cast(0.3757457624476840396478985178609736319955e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7c, d7c, static_cast(10247.25f)), static_cast(0.8991031618241406513349732955332873069556e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7a, d7a, static_cast(0.125)), static_cast(0.1161348466465698540596242849979738853664e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7a, d7a, static_cast(0.25)), static_cast(0.1010247476558897371522262642824204539632e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7a, d7a, static_cast(0.75)), static_cast(0.103079575951134804308491906398377636644e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7a, d7a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1183671559390403425417413542214181025989e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7a, d7a, static_cast(6.5f)), static_cast(0.3757457624476840396478985178609736319955e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n7a, d7a, static_cast(10247.25f)), static_cast(0.8991031618241406513349732955332873069556e1L), tolerance); } template void do_test_spots7(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 7 // static const U n8c[8] = { 9, 5, 6, 1, 12, 2, 11, 1 }; static const boost::array n8a = {{ 9, 5, 6, 1, 12, 2, 11, 1 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(0.125), 8), static_cast(0.9723736286163330078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(0.25), 8), static_cast(0.1069219970703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(0.75), 8), static_cast(0.2290960693359375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(1.0f - 1.0f/64.0f), 8), static_cast(0.4470947054706607559637632220983505249023e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(6.5), 8), static_cast(0.13650267734375e7L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(10247.25), 8), static_cast(0.1187728773094625678513681460864459228516e29L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(0.125)), static_cast(0.9723736286163330078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(0.25)), static_cast(0.1069219970703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(0.75)), static_cast(0.2290960693359375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4470947054706607559637632220983505249023e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(6.5)), static_cast(0.13650267734375e7L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8c, static_cast(10247.25)), static_cast(0.1187728773094625678513681460864459228516e29L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8a, static_cast(0.125)), static_cast(0.9723736286163330078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8a, static_cast(0.25)), static_cast(0.1069219970703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8a, static_cast(0.75)), static_cast(0.2290960693359375e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4470947054706607559637632220983505249023e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8a, static_cast(6.5)), static_cast(0.13650267734375e7L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n8a, static_cast(10247.25)), static_cast(0.1187728773094625678513681460864459228516e29L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(0.125), 8), static_cast(0.9079594375725946520105935633182525634766e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(0.25), 8), static_cast(0.93363673128187656402587890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(0.75), 8), static_cast(0.155691558457911014556884765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(1.0f - 1.0f/64.0f), 8), static_cast(0.4258457138999176910226338119632657870077e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(6.5f), 8), static_cast(0.30319406120433428955078125e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(0.125)), static_cast(0.9079594375725946520105935633182525634766e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(0.25)), static_cast(0.93363673128187656402587890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(0.75)), static_cast(0.155691558457911014556884765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4258457138999176910226338119632657870077e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8c, static_cast(6.5f)), static_cast(0.30319406120433428955078125e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8a, static_cast(0.125)), static_cast(0.9079594375725946520105935633182525634766e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8a, static_cast(0.25)), static_cast(0.93363673128187656402587890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8a, static_cast(0.75)), static_cast(0.155691558457911014556884765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4258457138999176910226338119632657870077e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n8a, static_cast(6.5f)), static_cast(0.30319406120433428955078125e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(0.125), 8), static_cast(0.9636755005807572160847485065460205078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(0.25), 8), static_cast(0.1034546925127506256103515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(0.75), 8), static_cast(0.1775887446105480194091796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(1.0f - 1.0f/64.0f), 8), static_cast(0.4311765982475354321499772058039525455316e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(6.5f), 8), static_cast(0.466452401928975830078125e11L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(0.125)), static_cast(0.9636755005807572160847485065460205078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(0.25)), static_cast(0.1034546925127506256103515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(0.75)), static_cast(0.1775887446105480194091796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4311765982475354321499772058039525455316e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8c, static_cast(6.5f)), static_cast(0.466452401928975830078125e11L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8a, static_cast(0.125)), static_cast(0.9636755005807572160847485065460205078125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8a, static_cast(0.25)), static_cast(0.1034546925127506256103515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8a, static_cast(0.75)), static_cast(0.1775887446105480194091796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4311765982475354321499772058039525455316e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n8a, static_cast(6.5f)), static_cast(0.466452401928975830078125e11L), tolerance); // // Rational functions of order 7 // static const U d8c[8] = { 7, 10, 10, 11, 2, 4, 1, 7 }; static const boost::array d8a = {{ 7, 10, 10, 11, 2, 4, 1, 7 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(0.125), 8), static_cast(0.1153693678861771369296601206130394355814e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(0.25), 8), static_cast(0.103714470093009762768860970830101771981e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(0.75), 8), static_cast(0.834289461108456229648481346061946410909e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(1.0f - 1.0f/64.0f), 8), static_cast(0.8981362736388035283180082845549732926578e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(6.5f), 8), static_cast(0.383383275200627223098571833372266642165e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(10247.25f), 8), static_cast(0.1430085023641929377426860779365964126311e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(0.125)), static_cast(0.1153693678861771369296601206130394355814e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(0.25)), static_cast(0.103714470093009762768860970830101771981e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(0.75)), static_cast(0.834289461108456229648481346061946410909e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8981362736388035283180082845549732926578e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(6.5f)), static_cast(0.383383275200627223098571833372266642165e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8c, d8c, static_cast(10247.25f)), static_cast(0.1430085023641929377426860779365964126311e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8a, d8a, static_cast(0.125)), static_cast(0.1153693678861771369296601206130394355814e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8a, d8a, static_cast(0.25)), static_cast(0.103714470093009762768860970830101771981e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8a, d8a, static_cast(0.75)), static_cast(0.834289461108456229648481346061946410909e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8a, d8a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8981362736388035283180082845549732926578e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8a, d8a, static_cast(6.5f)), static_cast(0.383383275200627223098571833372266642165e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n8a, d8a, static_cast(10247.25f)), static_cast(0.1430085023641929377426860779365964126311e0L), tolerance); } template void do_test_spots8(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 8 // static const U n9c[9] = { 3, 9, 3, 9, 5, 6, 10, 7, 10 }; static const boost::array n9a = {{ 3, 9, 3, 9, 5, 6, 10, 7, 10 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(0.125), 9), static_cast(0.419089901447296142578125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(0.25), 9), static_cast(0.5606536865234375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(0.75), 9), static_cast(0.21955535888671875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(1.0f - 1.0f/64.0f), 9), static_cast(0.577754343750660055434309470001608133316e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(6.5), 9), static_cast(0.3613143234375e8L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(10247.25), 9), static_cast(0.1215873306624182859977656082228297326996e34L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(0.125)), static_cast(0.419089901447296142578125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(0.25)), static_cast(0.5606536865234375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(0.75)), static_cast(0.21955535888671875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.577754343750660055434309470001608133316e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(6.5)), static_cast(0.3613143234375e8L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9c, static_cast(10247.25)), static_cast(0.1215873306624182859977656082228297326996e34L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9a, static_cast(0.125)), static_cast(0.419089901447296142578125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9a, static_cast(0.25)), static_cast(0.5606536865234375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9a, static_cast(0.75)), static_cast(0.21955535888671875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.577754343750660055434309470001608133316e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9a, static_cast(6.5)), static_cast(0.3613143234375e8L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n9a, static_cast(10247.25)), static_cast(0.1215873306624182859977656082228297326996e34L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(0.125), 9), static_cast(0.3141392057908696244794555241242051124573e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(0.25), 9), static_cast(0.35764986560679972171783447265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(0.75), 9), static_cast(0.119936861679889261722564697265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(1.0f - 1.0f/64.0f), 9), static_cast(0.5392583642412261279423815221065846904997e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(6.5f), 9), static_cast(0.103274449934495763275146484375e15L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(0.125)), static_cast(0.3141392057908696244794555241242051124573e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(0.25)), static_cast(0.35764986560679972171783447265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(0.75)), static_cast(0.119936861679889261722564697265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.5392583642412261279423815221065846904997e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9c, static_cast(6.5f)), static_cast(0.103274449934495763275146484375e15L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9a, static_cast(0.125)), static_cast(0.3141392057908696244794555241242051124573e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9a, static_cast(0.25)), static_cast(0.35764986560679972171783447265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9a, static_cast(0.75)), static_cast(0.119936861679889261722564697265625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.5392583642412261279423815221065846904997e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n9a, static_cast(6.5f)), static_cast(0.103274449934495763275146484375e15L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(0.125), 9), static_cast(0.4131136463269569958356441929936408996582e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(0.25), 9), static_cast(0.530599462427198886871337890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(0.75), 9), static_cast(0.1499158155731856822967529296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(1.0f - 1.0f/64.0f), 9), static_cast(0.5473418303402932093382923399178003205076e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(6.5f), 9), static_cast(0.1588837691300188665771484375e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(0.125)), static_cast(0.4131136463269569958356441929936408996582e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(0.25)), static_cast(0.530599462427198886871337890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(0.75)), static_cast(0.1499158155731856822967529296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.5473418303402932093382923399178003205076e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9c, static_cast(6.5f)), static_cast(0.1588837691300188665771484375e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9a, static_cast(0.125)), static_cast(0.4131136463269569958356441929936408996582e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9a, static_cast(0.25)), static_cast(0.530599462427198886871337890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9a, static_cast(0.75)), static_cast(0.1499158155731856822967529296875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.5473418303402932093382923399178003205076e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n9a, static_cast(6.5f)), static_cast(0.1588837691300188665771484375e14L), tolerance); // // Rational functions of order 8 // static const U d9c[9] = { 12, 3, 10, 4, 6, 6, 6, 10, 7 }; static const boost::array d9a = {{ 12, 3, 10, 4, 6, 6, 6, 10, 7 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(0.125), 9), static_cast(0.3341827920887278954826517708316980450243e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(0.25), 9), static_cast(0.4162555242250224594229316089330159747956e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(0.75), 9), static_cast(0.7844550246723573100342976024389406178802e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(1.0f - 1.0f/64.0f), 9), static_cast(0.959335028097323235424759017468360386113e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(6.5f), 9), static_cast(0.1302420407483849169746727326286868117535e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(10247.25f), 9), static_cast(0.1428469874366314841691622991213446692856e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(0.125)), static_cast(0.3341827920887278954826517708316980450243e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(0.25)), static_cast(0.4162555242250224594229316089330159747956e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(0.75)), static_cast(0.7844550246723573100342976024389406178802e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.959335028097323235424759017468360386113e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(6.5f)), static_cast(0.1302420407483849169746727326286868117535e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9c, d9c, static_cast(10247.25f)), static_cast(0.1428469874366314841691622991213446692856e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9a, d9a, static_cast(0.125)), static_cast(0.3341827920887278954826517708316980450243e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9a, d9a, static_cast(0.25)), static_cast(0.4162555242250224594229316089330159747956e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9a, d9a, static_cast(0.75)), static_cast(0.7844550246723573100342976024389406178802e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9a, d9a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.959335028097323235424759017468360386113e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9a, d9a, static_cast(6.5f)), static_cast(0.1302420407483849169746727326286868117535e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n9a, d9a, static_cast(10247.25f)), static_cast(0.1428469874366314841691622991213446692856e1L), tolerance); } template void do_test_spots9(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 9 // static const U n10c[10] = { 3, 4, 2, 6, 8, 1, 2, 4, 8, 8 }; static const boost::array n10a = {{ 3, 4, 2, 6, 8, 1, 2, 4, 8, 8 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(0.125), 10), static_cast(0.3544962465763092041015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(0.25), 10), static_cast(0.4251861572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(0.75), 10), static_cast(0.14716278076171875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(1.0f - 1.0f/64.0f), 10), static_cast(0.4243246072286939307716124858416151255369e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(6.5), 10), static_cast(0.193326261328125e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(10247.25), 10), static_cast(0.9967777935240642903307419028007759631098e37L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(0.125)), static_cast(0.3544962465763092041015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(0.25)), static_cast(0.4251861572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(0.75)), static_cast(0.14716278076171875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4243246072286939307716124858416151255369e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(6.5)), static_cast(0.193326261328125e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10c, static_cast(10247.25)), static_cast(0.9967777935240642903307419028007759631098e37L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10a, static_cast(0.125)), static_cast(0.3544962465763092041015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10a, static_cast(0.25)), static_cast(0.4251861572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10a, static_cast(0.75)), static_cast(0.14716278076171875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.4243246072286939307716124858416151255369e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10a, static_cast(6.5)), static_cast(0.193326261328125e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n10a, static_cast(10247.25)), static_cast(0.9967777935240642903307419028007759631098e37L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(0.125), 10), static_cast(0.3063011647232116718697625401546247303486e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(0.25), 10), static_cast(0.3259400503826327621936798095703125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(0.75), 10), static_cast(0.8067807371844537556171417236328125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(1.0f - 1.0f/64.0f), 10), static_cast(0.3922779295817342542834377568121069117613e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(6.5f), 10), static_cast(0.3514067090785774022613525390625e16L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(0.125)), static_cast(0.3063011647232116718697625401546247303486e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(0.25)), static_cast(0.3259400503826327621936798095703125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(0.75)), static_cast(0.8067807371844537556171417236328125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3922779295817342542834377568121069117613e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10c, static_cast(6.5f)), static_cast(0.3514067090785774022613525390625e16L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10a, static_cast(0.125)), static_cast(0.3063011647232116718697625401546247303486e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10a, static_cast(0.25)), static_cast(0.3259400503826327621936798095703125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10a, static_cast(0.75)), static_cast(0.8067807371844537556171417236328125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3922779295817342542834377568121069117613e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n10a, static_cast(6.5f)), static_cast(0.3514067090785774022613525390625e16L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(0.125), 10), static_cast(0.3504093177856933749581003212369978427887e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(0.25), 10), static_cast(0.40376020153053104877471923828125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(0.75), 10), static_cast(0.97570764957927167415618896484375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(1.0f - 1.0f/64.0f), 10), static_cast(0.3980283729084284487958732767615054341702e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(6.5f), 10), static_cast(0.54062570627473700347900390625e15L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(0.125)), static_cast(0.3504093177856933749581003212369978427887e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(0.25)), static_cast(0.40376020153053104877471923828125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(0.75)), static_cast(0.97570764957927167415618896484375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3980283729084284487958732767615054341702e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10c, static_cast(6.5f)), static_cast(0.54062570627473700347900390625e15L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10a, static_cast(0.125)), static_cast(0.3504093177856933749581003212369978427887e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10a, static_cast(0.25)), static_cast(0.40376020153053104877471923828125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10a, static_cast(0.75)), static_cast(0.97570764957927167415618896484375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.3980283729084284487958732767615054341702e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n10a, static_cast(6.5f)), static_cast(0.54062570627473700347900390625e15L), tolerance); // // Rational functions of order 9 // static const U d10c[10] = { 3, 11, 1, 12, 8, 8, 7, 10, 8, 8 }; static const boost::array d10a = {{ 3, 11, 1, 12, 8, 8, 7, 10, 8, 8 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(0.125), 10), static_cast(0.8027011456035955638016996485812217742707e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(0.25), 10), static_cast(0.7037718026559713894599659542655668311705e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(0.75), 10), static_cast(0.5819711007563332500606442409694389231031e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(1.0f - 1.0f/64.0f), 10), static_cast(0.6021345078884753739086911192013079405483e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(6.5f), 10), static_cast(0.9827105949744728065574239430024037810213e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(10247.25f), 10), static_cast(0.9999999928576761766405011572543053028339e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(0.125)), static_cast(0.8027011456035955638016996485812217742707e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(0.25)), static_cast(0.7037718026559713894599659542655668311705e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(0.75)), static_cast(0.5819711007563332500606442409694389231031e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.6021345078884753739086911192013079405483e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(6.5f)), static_cast(0.9827105949744728065574239430024037810213e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10c, d10c, static_cast(10247.25f)), static_cast(0.9999999928576761766405011572543053028339e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10a, d10a, static_cast(0.125)), static_cast(0.8027011456035955638016996485812217742707e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10a, d10a, static_cast(0.25)), static_cast(0.7037718026559713894599659542655668311705e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10a, d10a, static_cast(0.75)), static_cast(0.5819711007563332500606442409694389231031e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10a, d10a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.6021345078884753739086911192013079405483e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10a, d10a, static_cast(6.5f)), static_cast(0.9827105949744728065574239430024037810213e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n10a, d10a, static_cast(10247.25f)), static_cast(0.9999999928576761766405011572543053028339e0L), tolerance); } template void do_test_spots10(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 10 // static const U n11c[11] = { 2, 2, 8, 11, 3, 4, 10, 11, 5, 1, 6 }; static const boost::array n11a = {{ 2, 2, 8, 11, 3, 4, 10, 11, 5, 1, 6 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(0.125), 11), static_cast(0.239738257043063640594482421875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(0.25), 11), static_cast(0.31906986236572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(0.75), 11), static_cast(0.187007007598876953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(1.0f - 1.0f/64.0f), 11), static_cast(0.5807897685780276847943015550157497273176e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(6.5), 11), static_cast(0.85061053443359375e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(0.125)), static_cast(0.239738257043063640594482421875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(0.25)), static_cast(0.31906986236572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(0.75)), static_cast(0.187007007598876953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.5807897685780276847943015550157497273176e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11c, static_cast(6.5)), static_cast(0.85061053443359375e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11a, static_cast(0.125)), static_cast(0.239738257043063640594482421875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11a, static_cast(0.25)), static_cast(0.31906986236572265625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11a, static_cast(0.75)), static_cast(0.187007007598876953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.5807897685780276847943015550157497273176e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n11a, static_cast(6.5)), static_cast(0.85061053443359375e9L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(0.125), 11), static_cast(0.2033245269357184586631048794913567689946e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(0.25), 11), static_cast(0.2158985776148256263695657253265380859375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(0.75), 11), static_cast(0.8727145384755203849636018276214599609375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(1.0f - 1.0f/64.0f), 11), static_cast(0.5363972553738812062759598952966094072427e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(6.5f), 11), static_cast(0.1092297265410211371166019439697265625e18L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(0.125)), static_cast(0.2033245269357184586631048794913567689946e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(0.25)), static_cast(0.2158985776148256263695657253265380859375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(0.75)), static_cast(0.8727145384755203849636018276214599609375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.5363972553738812062759598952966094072427e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11c, static_cast(6.5f)), static_cast(0.1092297265410211371166019439697265625e18L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11a, static_cast(0.125)), static_cast(0.2033245269357184586631048794913567689946e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11a, static_cast(0.25)), static_cast(0.2158985776148256263695657253265380859375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11a, static_cast(0.75)), static_cast(0.8727145384755203849636018276214599609375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.5363972553738812062759598952966094072427e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n11a, static_cast(6.5f)), static_cast(0.1092297265410211371166019439697265625e18L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(0.125), 11), static_cast(0.2265962154857476693048390359308541519567e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(0.25), 11), static_cast(0.26359431045930250547826290130615234375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(0.75), 11), static_cast(0.109695271796736051328480243682861328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(1.0f - 1.0f/64.0f), 11), static_cast(0.544594037205212653994625925380682572437e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(6.5f), 11), static_cast(0.16804573314003253556400299072265625e17L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(0.125)), static_cast(0.2265962154857476693048390359308541519567e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(0.25)), static_cast(0.26359431045930250547826290130615234375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(0.75)), static_cast(0.109695271796736051328480243682861328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.544594037205212653994625925380682572437e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11c, static_cast(6.5f)), static_cast(0.16804573314003253556400299072265625e17L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11a, static_cast(0.125)), static_cast(0.2265962154857476693048390359308541519567e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11a, static_cast(0.25)), static_cast(0.26359431045930250547826290130615234375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11a, static_cast(0.75)), static_cast(0.109695271796736051328480243682861328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.544594037205212653994625925380682572437e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n11a, static_cast(6.5f)), static_cast(0.16804573314003253556400299072265625e17L), tolerance); // // Rational functions of order 10 // static const U d11c[11] = { 4, 1, 3, 9, 11, 8, 11, 2, 6, 6, 4 }; static const boost::array d11a = {{ 4, 1, 3, 9, 11, 8, 11, 2, 6, 6, 4 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(0.125), 11), static_cast(0.5718365676248588095654568811483084403598e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(0.25), 11), static_cast(0.6888631839546304707516922567568791812269e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(0.75), 11), static_cast(0.9783539912974912482969079012097816310129e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(1.0f - 1.0f/64.0f), 11), static_cast(0.9694017102874332007392886881642471036972e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(6.5f), 11), static_cast(0.1243900864392932237542421996384079347041e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(10247.25f), 11), static_cast(0.1499804844733304585200728061706913399511e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(0.125)), static_cast(0.5718365676248588095654568811483084403598e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(0.25)), static_cast(0.6888631839546304707516922567568791812269e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(0.75)), static_cast(0.9783539912974912482969079012097816310129e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.9694017102874332007392886881642471036972e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(6.5f)), static_cast(0.1243900864392932237542421996384079347041e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11c, d11c, static_cast(10247.25f)), static_cast(0.1499804844733304585200728061706913399511e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11a, d11a, static_cast(0.125)), static_cast(0.5718365676248588095654568811483084403598e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11a, d11a, static_cast(0.25)), static_cast(0.6888631839546304707516922567568791812269e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11a, d11a, static_cast(0.75)), static_cast(0.9783539912974912482969079012097816310129e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11a, d11a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.9694017102874332007392886881642471036972e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11a, d11a, static_cast(6.5f)), static_cast(0.1243900864392932237542421996384079347041e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n11a, d11a, static_cast(10247.25f)), static_cast(0.1499804844733304585200728061706913399511e1L), tolerance); } template void do_test_spots11(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 11 // static const U n12c[12] = { 10, 12, 4, 1, 12, 7, 11, 5, 12, 5, 10, 6 }; static const boost::array n12a = {{ 10, 12, 4, 1, 12, 7, 11, 5, 12, 5, 10, 6 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(0.125), 12), static_cast(0.1156764154392294585704803466796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(0.25), 12), static_cast(0.13322539806365966796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(0.75), 12), static_cast(0.32148390293121337890625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(1.0f - 1.0f/64.0f), 12), static_cast(0.8737331822870016474402916385744166660743e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(6.5), 12), static_cast(0.67419250750654296875e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(0.125)), static_cast(0.1156764154392294585704803466796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(0.25)), static_cast(0.13322539806365966796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(0.75)), static_cast(0.32148390293121337890625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8737331822870016474402916385744166660743e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12c, static_cast(6.5)), static_cast(0.67419250750654296875e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12a, static_cast(0.125)), static_cast(0.1156764154392294585704803466796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12a, static_cast(0.25)), static_cast(0.13322539806365966796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12a, static_cast(0.75)), static_cast(0.32148390293121337890625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8737331822870016474402916385744166660743e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n12a, static_cast(6.5)), static_cast(0.67419250750654296875e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(0.125), 12), static_cast(0.101884810991335118067599354446661763518e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(0.25), 12), static_cast(0.1076605959896767217287560924887657165527e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(0.75), 12), static_cast(0.2041755737073560794669901952147483825684e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(1.0f - 1.0f/64.0f), 12), static_cast(0.8060387357327405373376954971672611741429e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(6.5f), 12), static_cast(0.4778085851102157284559772014617919921875e19L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(0.125)), static_cast(0.101884810991335118067599354446661763518e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(0.25)), static_cast(0.1076605959896767217287560924887657165527e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(0.75)), static_cast(0.2041755737073560794669901952147483825684e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8060387357327405373376954971672611741429e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12c, static_cast(6.5f)), static_cast(0.4778085851102157284559772014617919921875e19L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12a, static_cast(0.125)), static_cast(0.101884810991335118067599354446661763518e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12a, static_cast(0.25)), static_cast(0.1076605959896767217287560924887657165527e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12a, static_cast(0.75)), static_cast(0.2041755737073560794669901952147483825684e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8060387357327405373376954971672611741429e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n12a, static_cast(6.5f)), static_cast(0.4778085851102157284559772014617919921875e19L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(0.125), 12), static_cast(0.1150784879306809445407948355732941081442e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(0.25), 12), static_cast(0.1306423839587068869150243699550628662109e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(0.75), 12), static_cast(0.2389007649431414392893202602863311767578e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(1.0f - 1.0f/64.0f), 12), static_cast(0.8172456997919903871367065368048367483356e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(6.5f), 12), static_cast(0.73509013093879343685534954071044921875e18L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(0.125)), static_cast(0.1150784879306809445407948355732941081442e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(0.25)), static_cast(0.1306423839587068869150243699550628662109e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(0.75)), static_cast(0.2389007649431414392893202602863311767578e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8172456997919903871367065368048367483356e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12c, static_cast(6.5f)), static_cast(0.73509013093879343685534954071044921875e18L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12a, static_cast(0.125)), static_cast(0.1150784879306809445407948355732941081442e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12a, static_cast(0.25)), static_cast(0.1306423839587068869150243699550628662109e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12a, static_cast(0.75)), static_cast(0.2389007649431414392893202602863311767578e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8172456997919903871367065368048367483356e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n12a, static_cast(6.5f)), static_cast(0.73509013093879343685534954071044921875e18L), tolerance); // // Rational functions of order 11 // static const U d12c[12] = { 12, 5, 2, 8, 3, 2, 6, 9, 2, 8, 9, 12 }; static const boost::array d12a = {{ 12, 5, 2, 8, 3, 2, 6, 9, 2, 8, 9, 12 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(0.125), 12), static_cast(0.9128003783370762743953357962892418132189e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(0.25), 12), static_cast(0.9857041905689267091438933694601440838819e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(0.75), 12), static_cast(0.1248112763387283893598834927961632655902e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(1.0f - 1.0f/64.0f), 12), static_cast(0.1227813945781309965073515980672922656926e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(6.5f), 12), static_cast(0.5670462630528956417277364302989555872917e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(10247.25f), 12), static_cast(0.5000447249679368028702341332079904080375e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(0.125)), static_cast(0.9128003783370762743953357962892418132189e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(0.25)), static_cast(0.9857041905689267091438933694601440838819e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(0.75)), static_cast(0.1248112763387283893598834927961632655902e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1227813945781309965073515980672922656926e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(6.5f)), static_cast(0.5670462630528956417277364302989555872917e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12c, d12c, static_cast(10247.25f)), static_cast(0.5000447249679368028702341332079904080375e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12a, d12a, static_cast(0.125)), static_cast(0.9128003783370762743953357962892418132189e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12a, d12a, static_cast(0.25)), static_cast(0.9857041905689267091438933694601440838819e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12a, d12a, static_cast(0.75)), static_cast(0.1248112763387283893598834927961632655902e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12a, d12a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1227813945781309965073515980672922656926e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12a, d12a, static_cast(6.5f)), static_cast(0.5670462630528956417277364302989555872917e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n12a, d12a, static_cast(10247.25f)), static_cast(0.5000447249679368028702341332079904080375e0L), tolerance); } template void do_test_spots12(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 12 // static const U n13c[13] = { 4, 11, 7, 1, 1, 1, 8, 11, 10, 12, 8, 2, 1 }; static const boost::array n13a = {{ 4, 11, 7, 1, 1, 1, 8, 11, 10, 12, 8, 2, 1 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(0.125), 13), static_cast(0.5486639239141368307173252105712890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(0.25), 13), static_cast(0.7210838854312896728515625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(0.75), 13), static_cast(0.22524036943912506103515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(1.0f - 1.0f/64.0f), 13), static_cast(0.7013317633407797455061737623412208147977e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(6.5), 13), static_cast(0.8801602436469970703125e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(0.125)), static_cast(0.5486639239141368307173252105712890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(0.25)), static_cast(0.7210838854312896728515625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(0.75)), static_cast(0.22524036943912506103515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7013317633407797455061737623412208147977e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13c, static_cast(6.5)), static_cast(0.8801602436469970703125e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13a, static_cast(0.125)), static_cast(0.5486639239141368307173252105712890625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13a, static_cast(0.25)), static_cast(0.7210838854312896728515625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13a, static_cast(0.75)), static_cast(0.22524036943912506103515625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7013317633407797455061737623412208147977e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n13a, static_cast(6.5)), static_cast(0.8801602436469970703125e10L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(0.125), 13), static_cast(0.4173587859727185607499727379291788731397e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(0.25), 13), static_cast(0.4715104623414053008900737040676176548004e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(0.75), 13), static_cast(0.1338397611887558369403450342360883951187e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(1.0f - 1.0f/64.0f), 13), static_cast(0.6407202225497595548875186059951665936749e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(6.5f), 13), static_cast(0.3403521961549553788009664398431777954102e20L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(0.125)), static_cast(0.4173587859727185607499727379291788731397e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(0.25)), static_cast(0.4715104623414053008900737040676176548004e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(0.75)), static_cast(0.1338397611887558369403450342360883951187e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.6407202225497595548875186059951665936749e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13c, static_cast(6.5f)), static_cast(0.3403521961549553788009664398431777954102e20L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13a, static_cast(0.125)), static_cast(0.4173587859727185607499727379291788731397e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13a, static_cast(0.25)), static_cast(0.4715104623414053008900737040676176548004e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13a, static_cast(0.75)), static_cast(0.1338397611887558369403450342360883951187e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.6407202225497595548875186059951665936749e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n13a, static_cast(6.5f)), static_cast(0.3403521961549553788009664398431777954102e20L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(0.125), 13), static_cast(0.5388702877817484859997819034334309851175e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(0.25), 13), static_cast(0.6860418493656212035602948162704706192017e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(0.75), 13), static_cast(0.165119681585007782587126712314784526825e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(1.0f - 1.0f/64.0f), 13), static_cast(0.6502554641775335160762093775188993967491e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(6.5f), 13), static_cast(0.5236187633153159677245637536048889160156e19L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(0.125)), static_cast(0.5388702877817484859997819034334309851175e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(0.25)), static_cast(0.6860418493656212035602948162704706192017e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(0.75)), static_cast(0.165119681585007782587126712314784526825e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.6502554641775335160762093775188993967491e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13c, static_cast(6.5f)), static_cast(0.5236187633153159677245637536048889160156e19L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13a, static_cast(0.125)), static_cast(0.5388702877817484859997819034334309851175e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13a, static_cast(0.25)), static_cast(0.6860418493656212035602948162704706192017e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13a, static_cast(0.75)), static_cast(0.165119681585007782587126712314784526825e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.6502554641775335160762093775188993967491e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n13a, static_cast(6.5f)), static_cast(0.5236187633153159677245637536048889160156e19L), tolerance); // // Rational functions of order 12 // static const U d13c[13] = { 4, 7, 1, 6, 11, 4, 9, 11, 1, 10, 1, 11, 12 }; static const boost::array d13a = {{ 4, 7, 1, 6, 11, 4, 9, 11, 1, 10, 1, 11, 12 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(0.125), 13), static_cast(0.1118537310443419140823936840990235560775e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(0.25), 13), static_cast(0.12106743933208147312270004711488386001e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(0.75), 13), static_cast(0.1042994706832119738384940706309786965245e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(1.0f - 1.0f/64.0f), 13), static_cast(0.8849937505065081554917467830175954168154e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(6.5f), 13), static_cast(0.1125049235146435310211414108934070096386e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(10247.25f), 13), static_cast(0.8334214878002966556152610218152238753709e-1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(0.125)), static_cast(0.1118537310443419140823936840990235560775e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(0.25)), static_cast(0.12106743933208147312270004711488386001e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(0.75)), static_cast(0.1042994706832119738384940706309786965245e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8849937505065081554917467830175954168154e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(6.5f)), static_cast(0.1125049235146435310211414108934070096386e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13c, d13c, static_cast(10247.25f)), static_cast(0.8334214878002966556152610218152238753709e-1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13a, d13a, static_cast(0.125)), static_cast(0.1118537310443419140823936840990235560775e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13a, d13a, static_cast(0.25)), static_cast(0.12106743933208147312270004711488386001e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13a, d13a, static_cast(0.75)), static_cast(0.1042994706832119738384940706309786965245e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13a, d13a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8849937505065081554917467830175954168154e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13a, d13a, static_cast(6.5f)), static_cast(0.1125049235146435310211414108934070096386e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n13a, d13a, static_cast(10247.25f)), static_cast(0.8334214878002966556152610218152238753709e-1L), tolerance); } template void do_test_spots13(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 13 // static const U n14c[14] = { 5, 5, 3, 5, 12, 8, 10, 5, 5, 9, 2, 10, 3, 3 }; static const boost::array n14a = {{ 5, 5, 3, 5, 12, 8, 10, 5, 5, 9, 2, 10, 3, 3 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(0.125), 14), static_cast(0.5684855352437807596288621425628662109375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(0.25), 14), static_cast(0.657317422330379486083984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(0.75), 14), static_cast(0.2256699807941913604736328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(1.0f - 1.0f/64.0f), 14), static_cast(0.7710103154409585858207746641830426369713e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(6.5), 14), static_cast(0.1372059025011920166015625e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(0.125)), static_cast(0.5684855352437807596288621425628662109375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(0.25)), static_cast(0.657317422330379486083984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(0.75)), static_cast(0.2256699807941913604736328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7710103154409585858207746641830426369713e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14c, static_cast(6.5)), static_cast(0.1372059025011920166015625e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14a, static_cast(0.125)), static_cast(0.5684855352437807596288621425628662109375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14a, static_cast(0.25)), static_cast(0.657317422330379486083984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14a, static_cast(0.75)), static_cast(0.2256699807941913604736328125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7710103154409585858207746641830426369713e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n14a, static_cast(6.5)), static_cast(0.1372059025011920166015625e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(0.125), 14), static_cast(0.5078877218214320312311861835604176527818e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(0.25), 14), static_cast(0.5325630803958699699407475236512254923582e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(0.75), 14), static_cast(0.1183906394403697492911931021808413788676e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(1.0f - 1.0f/64.0f), 14), static_cast(0.7015764398304385537424317046920004042802e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(6.5f), 14), static_cast(0.4205557544065332561152158209905028343201e22L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(0.125)), static_cast(0.5078877218214320312311861835604176527818e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(0.25)), static_cast(0.5325630803958699699407475236512254923582e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(0.75)), static_cast(0.1183906394403697492911931021808413788676e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7015764398304385537424317046920004042802e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14c, static_cast(6.5f)), static_cast(0.4205557544065332561152158209905028343201e22L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14a, static_cast(0.125)), static_cast(0.5078877218214320312311861835604176527818e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14a, static_cast(0.25)), static_cast(0.5325630803958699699407475236512254923582e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14a, static_cast(0.75)), static_cast(0.1183906394403697492911931021808413788676e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7015764398304385537424317046920004042802e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n14a, static_cast(6.5f)), static_cast(0.4205557544065332561152158209905028343201e22L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(0.125), 14), static_cast(0.5631017745714562498494894684833412222547e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(0.25), 14), static_cast(0.6302523215834798797629900946049019694328e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(0.75), 14), static_cast(0.1411875192538263323882574695744551718235e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(1.0f - 1.0f/64.0f), 14), static_cast(0.7119189230023502768177083984172702519672e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(6.5f), 14), static_cast(0.6470088529331280863353320322930812835693e21L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(0.125)), static_cast(0.5631017745714562498494894684833412222547e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(0.25)), static_cast(0.6302523215834798797629900946049019694328e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(0.75)), static_cast(0.1411875192538263323882574695744551718235e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7119189230023502768177083984172702519672e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14c, static_cast(6.5f)), static_cast(0.6470088529331280863353320322930812835693e21L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14a, static_cast(0.125)), static_cast(0.5631017745714562498494894684833412222547e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14a, static_cast(0.25)), static_cast(0.6302523215834798797629900946049019694328e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14a, static_cast(0.75)), static_cast(0.1411875192538263323882574695744551718235e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7119189230023502768177083984172702519672e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n14a, static_cast(6.5f)), static_cast(0.6470088529331280863353320322930812835693e21L), tolerance); // // Rational functions of order 13 // static const U d14c[14] = { 1, 2, 1, 8, 5, 8, 2, 11, 3, 6, 5, 9, 7, 10 }; static const boost::array d14a = {{ 1, 2, 1, 8, 5, 8, 2, 11, 3, 6, 5, 9, 7, 10 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(0.125), 14), static_cast(0.4431848049037056640776200482297774574883e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(0.25), 14), static_cast(0.3830343514018902583833597521450902906851e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(0.75), 14), static_cast(0.1657621200711495617835320787645038062003e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(1.0f - 1.0f/64.0f), 14), static_cast(0.1117985091800992684003226640313705018678e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(6.5f), 14), static_cast(0.3280672161259396135368350556553925507681e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(10247.25f), 14), static_cast(0.3000087891957249835881866421118445480875e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(0.125)), static_cast(0.4431848049037056640776200482297774574883e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(0.25)), static_cast(0.3830343514018902583833597521450902906851e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(0.75)), static_cast(0.1657621200711495617835320787645038062003e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1117985091800992684003226640313705018678e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(6.5f)), static_cast(0.3280672161259396135368350556553925507681e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14c, d14c, static_cast(10247.25f)), static_cast(0.3000087891957249835881866421118445480875e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14a, d14a, static_cast(0.125)), static_cast(0.4431848049037056640776200482297774574883e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14a, d14a, static_cast(0.25)), static_cast(0.3830343514018902583833597521450902906851e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14a, d14a, static_cast(0.75)), static_cast(0.1657621200711495617835320787645038062003e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14a, d14a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1117985091800992684003226640313705018678e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14a, d14a, static_cast(6.5f)), static_cast(0.3280672161259396135368350556553925507681e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n14a, d14a, static_cast(10247.25f)), static_cast(0.3000087891957249835881866421118445480875e0L), tolerance); } template void do_test_spots14(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 14 // static const U n15c[15] = { 6, 2, 10, 2, 4, 11, 4, 6, 5, 5, 10, 12, 8, 6, 2 }; static const boost::array n15a = {{ 6, 2, 10, 2, 4, 11, 4, 6, 5, 5, 10, 12, 8, 6, 2 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(0.125), 15), static_cast(0.6411486971785507193999364972114562988281e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(0.25), 15), static_cast(0.7184068299829959869384765625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(0.75), 15), static_cast(0.21735079027712345123291015625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(1.0f - 1.0f/64.0f), 15), static_cast(0.8299984286646360949452954853655163780233e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(6.5), 15), static_cast(0.7599432765217742919921875e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(0.125)), static_cast(0.6411486971785507193999364972114562988281e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(0.25)), static_cast(0.7184068299829959869384765625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(0.75)), static_cast(0.21735079027712345123291015625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8299984286646360949452954853655163780233e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15c, static_cast(6.5)), static_cast(0.7599432765217742919921875e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15a, static_cast(0.125)), static_cast(0.6411486971785507193999364972114562988281e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15a, static_cast(0.25)), static_cast(0.7184068299829959869384765625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15a, static_cast(0.75)), static_cast(0.21735079027712345123291015625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8299984286646360949452954853655163780233e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n15a, static_cast(6.5)), static_cast(0.7599432765217742919921875e12L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(0.125), 15), static_cast(0.603369928436724862526100235763586452224e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(0.25), 15), static_cast(0.6164622568840771005271861326946236658841e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(0.75), 15), static_cast(0.1204200081304656236302896843426424311474e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(1.0f - 1.0f/64.0f), 15), static_cast(0.7438435296991670658675730793779505088179e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(6.5f), 15), static_cast(0.123975649339443727300884144392229616642e24L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(0.125)), static_cast(0.603369928436724862526100235763586452224e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(0.25)), static_cast(0.6164622568840771005271861326946236658841e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(0.75)), static_cast(0.1204200081304656236302896843426424311474e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7438435296991670658675730793779505088179e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15c, static_cast(6.5f)), static_cast(0.123975649339443727300884144392229616642e24L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15a, static_cast(0.125)), static_cast(0.603369928436724862526100235763586452224e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15a, static_cast(0.25)), static_cast(0.6164622568840771005271861326946236658841e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15a, static_cast(0.75)), static_cast(0.1204200081304656236302896843426424311474e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7438435296991670658675730793779505088179e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n15a, static_cast(6.5f)), static_cast(0.123975649339443727300884144392229616642e24L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(0.125), 15), static_cast(0.6269594274937989002088018861086916177919e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(0.25), 15), static_cast(0.6658490275363084021087445307784946635365e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(0.75), 15), static_cast(0.1405600108406208315070529124568565748632e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(1.0f - 1.0f/64.0f), 15), static_cast(0.7546981889007411462781694774633148026087e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(6.5f), 15), static_cast(0.1907317682145288112321802221418917179108e23L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(0.125)), static_cast(0.6269594274937989002088018861086916177919e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(0.25)), static_cast(0.6658490275363084021087445307784946635365e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(0.75)), static_cast(0.1405600108406208315070529124568565748632e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7546981889007411462781694774633148026087e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15c, static_cast(6.5f)), static_cast(0.1907317682145288112321802221418917179108e23L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15a, static_cast(0.125)), static_cast(0.6269594274937989002088018861086916177919e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15a, static_cast(0.25)), static_cast(0.6658490275363084021087445307784946635365e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15a, static_cast(0.75)), static_cast(0.1405600108406208315070529124568565748632e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7546981889007411462781694774633148026087e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n15a, static_cast(6.5f)), static_cast(0.1907317682145288112321802221418917179108e23L), tolerance); // // Rational functions of order 14 // static const U d15c[15] = { 7, 10, 7, 1, 10, 11, 11, 10, 7, 1, 10, 9, 8, 2, 3 }; static const boost::array d15a = {{ 7, 10, 7, 1, 10, 11, 11, 10, 7, 1, 10, 9, 8, 2, 3 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(0.125), 15), static_cast(0.7665435387801205084357966990293734431712e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(0.25), 15), static_cast(0.7179510450452743437979498898508621162489e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(0.75), 15), static_cast(0.7245051156202447814210400449367214490615e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(1.0f - 1.0f/64.0f), 15), static_cast(0.8564567127146107292325365412425895512358e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(6.5f), 15), static_cast(0.8943937154363365123476971638815814742919e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(10247.25f), 15), static_cast(0.6668184674989563469735607034881326982176e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(0.125)), static_cast(0.7665435387801205084357966990293734431712e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(0.25)), static_cast(0.7179510450452743437979498898508621162489e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(0.75)), static_cast(0.7245051156202447814210400449367214490615e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8564567127146107292325365412425895512358e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(6.5f)), static_cast(0.8943937154363365123476971638815814742919e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15c, d15c, static_cast(10247.25f)), static_cast(0.6668184674989563469735607034881326982176e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15a, d15a, static_cast(0.125)), static_cast(0.7665435387801205084357966990293734431712e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15a, d15a, static_cast(0.25)), static_cast(0.7179510450452743437979498898508621162489e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15a, d15a, static_cast(0.75)), static_cast(0.7245051156202447814210400449367214490615e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15a, d15a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8564567127146107292325365412425895512358e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15a, d15a, static_cast(6.5f)), static_cast(0.8943937154363365123476971638815814742919e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n15a, d15a, static_cast(10247.25f)), static_cast(0.6668184674989563469735607034881326982176e0L), tolerance); } template void do_test_spots15(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 15 // static const U n16c[16] = { 5, 3, 4, 6, 7, 9, 7, 6, 12, 12, 7, 12, 10, 3, 6, 2 }; static const boost::array n16a = {{ 5, 3, 4, 6, 7, 9, 7, 6, 12, 12, 7, 12, 10, 3, 6, 2 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(0.125), 16), static_cast(0.545123276921327715172083117067813873291e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(0.25), 16), static_cast(0.613219709135591983795166015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(0.75), 16), static_cast(0.2195364624075591564178466796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(1.0f - 1.0f/64.0f), 16), static_cast(0.9836568924934260045838041177111855604603e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(6.5), 16), static_cast(0.474557924297607818603515625e13L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(0.125)), static_cast(0.545123276921327715172083117067813873291e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(0.25)), static_cast(0.613219709135591983795166015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(0.75)), static_cast(0.2195364624075591564178466796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.9836568924934260045838041177111855604603e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16c, static_cast(6.5)), static_cast(0.474557924297607818603515625e13L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16a, static_cast(0.125)), static_cast(0.545123276921327715172083117067813873291e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16a, static_cast(0.25)), static_cast(0.613219709135591983795166015625e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16a, static_cast(0.75)), static_cast(0.2195364624075591564178466796875e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.9836568924934260045838041177111855604603e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n16a, static_cast(6.5)), static_cast(0.474557924297607818603515625e13L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(0.125), 16), static_cast(0.5047874876401281302859159688868887179229e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(0.25), 16), static_cast(0.5204705680902215943553490440365294489311e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(0.75), 16), static_cast(0.1080276729363941941482185615797106947866e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(1.0f - 1.0f/64.0f), 16), static_cast(0.8750139513999183433264859554731006794881e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(6.5f), 16), static_cast(0.5231073382834479254225049897383445873857e25L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(0.125)), static_cast(0.5047874876401281302859159688868887179229e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(0.25)), static_cast(0.5204705680902215943553490440365294489311e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(0.75)), static_cast(0.1080276729363941941482185615797106947866e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8750139513999183433264859554731006794881e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16c, static_cast(6.5f)), static_cast(0.5231073382834479254225049897383445873857e25L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16a, static_cast(0.125)), static_cast(0.5047874876401281302859159688868887179229e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16a, static_cast(0.25)), static_cast(0.5204705680902215943553490440365294489311e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16a, static_cast(0.75)), static_cast(0.1080276729363941941482185615797106947866e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8750139513999183433264859554731006794881e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n16a, static_cast(6.5f)), static_cast(0.5231073382834479254225049897383445873857e25L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(0.125), 16), static_cast(0.5382999011210250422873277510951097433836e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(0.25), 16), static_cast(0.5818822723608863774213961761461177957244e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(0.75), 16), static_cast(0.1273702305818589255309580821062809263822e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(1.0f - 1.0f/64.0f), 16), static_cast(0.8881094109459487932205571611155308490038e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(6.5f), 16), static_cast(0.8047805204360737314192426765205301344395e24L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(0.125)), static_cast(0.5382999011210250422873277510951097433836e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(0.25)), static_cast(0.5818822723608863774213961761461177957244e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(0.75)), static_cast(0.1273702305818589255309580821062809263822e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8881094109459487932205571611155308490038e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16c, static_cast(6.5f)), static_cast(0.8047805204360737314192426765205301344395e24L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16a, static_cast(0.125)), static_cast(0.5382999011210250422873277510951097433836e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16a, static_cast(0.25)), static_cast(0.5818822723608863774213961761461177957244e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16a, static_cast(0.75)), static_cast(0.1273702305818589255309580821062809263822e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8881094109459487932205571611155308490038e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n16a, static_cast(6.5f)), static_cast(0.8047805204360737314192426765205301344395e24L), tolerance); // // Rational functions of order 15 // static const U d16c[16] = { 9, 5, 2, 4, 4, 12, 11, 5, 1, 4, 1, 7, 9, 6, 6, 10 }; static const boost::array d16a = {{ 9, 5, 2, 4, 4, 12, 11, 5, 1, 4, 1, 7, 9, 6, 6, 10 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(0.125), 16), static_cast(0.5639916333371058636233240074655101514789e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(0.25), 16), static_cast(0.5858114501425065583332351775671440891069e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(0.75), 16), static_cast(0.9254727283150680371198227978127749853934e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(1.0f - 1.0f/64.0f), 16), static_cast(0.1155192269792597191440811772688208898465e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(6.5f), 16), static_cast(0.2736469218296852258039959401695110274611e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(10247.25f), 16), static_cast(0.2000468408076577399196121638600795513365e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(0.125)), static_cast(0.5639916333371058636233240074655101514789e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(0.25)), static_cast(0.5858114501425065583332351775671440891069e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(0.75)), static_cast(0.9254727283150680371198227978127749853934e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1155192269792597191440811772688208898465e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(6.5f)), static_cast(0.2736469218296852258039959401695110274611e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16c, d16c, static_cast(10247.25f)), static_cast(0.2000468408076577399196121638600795513365e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16a, d16a, static_cast(0.125)), static_cast(0.5639916333371058636233240074655101514789e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16a, d16a, static_cast(0.25)), static_cast(0.5858114501425065583332351775671440891069e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16a, d16a, static_cast(0.75)), static_cast(0.9254727283150680371198227978127749853934e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16a, d16a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.1155192269792597191440811772688208898465e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16a, d16a, static_cast(6.5f)), static_cast(0.2736469218296852258039959401695110274611e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n16a, d16a, static_cast(10247.25f)), static_cast(0.2000468408076577399196121638600795513365e0L), tolerance); } template void do_test_spots16(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 16 // static const U n17c[17] = { 9, 6, 11, 2, 9, 10, 6, 3, 3, 3, 4, 9, 10, 2, 3, 2, 2 }; static const boost::array n17a = {{ 9, 6, 11, 2, 9, 10, 6, 3, 3, 3, 4, 9, 10, 2, 3, 2, 2 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(0.125), 17), static_cast(0.9928308216189925872185995103791356086731e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(0.25), 17), static_cast(0.112653836444951593875885009765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(0.75), 17), static_cast(0.288157429718412458896636962890625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(1.0f - 1.0f/64.0f), 17), static_cast(0.8499409476622319741012411965028222548509e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(6.5), 17), static_cast(0.24291309657542805938720703125e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(0.125)), static_cast(0.9928308216189925872185995103791356086731e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(0.25)), static_cast(0.112653836444951593875885009765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(0.75)), static_cast(0.288157429718412458896636962890625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8499409476622319741012411965028222548509e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17c, static_cast(6.5)), static_cast(0.24291309657542805938720703125e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17a, static_cast(0.125)), static_cast(0.9928308216189925872185995103791356086731e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17a, static_cast(0.25)), static_cast(0.112653836444951593875885009765625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17a, static_cast(0.75)), static_cast(0.288157429718412458896636962890625e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8499409476622319741012411965028222548509e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n17a, static_cast(6.5)), static_cast(0.24291309657542805938720703125e14L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(0.125), 17), static_cast(0.9096443722112564415334975111453014308977e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(0.25), 17), static_cast(0.9418604266644799371155545586464796770088e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(0.75), 17), static_cast(0.1800748238050061998856161277204890325265e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(1.0f - 1.0f/64.0f), 17), static_cast(0.7725414891276907880696219594586980069116e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(6.5f), 17), static_cast(0.2112416072820759278619692697965107844211e27L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(0.125)), static_cast(0.9096443722112564415334975111453014308977e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(0.25)), static_cast(0.9418604266644799371155545586464796770088e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(0.75)), static_cast(0.1800748238050061998856161277204890325265e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7725414891276907880696219594586980069116e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17c, static_cast(6.5f)), static_cast(0.2112416072820759278619692697965107844211e27L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17a, static_cast(0.125)), static_cast(0.9096443722112564415334975111453014308977e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17a, static_cast(0.25)), static_cast(0.9418604266644799371155545586464796770088e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17a, static_cast(0.75)), static_cast(0.1800748238050061998856161277204890325265e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7725414891276907880696219594586980069116e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n17a, static_cast(6.5f)), static_cast(0.2112416072820759278619692697965107844211e27L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(0.125), 17), static_cast(0.9771549776900515322679800891624114471814e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(0.25), 17), static_cast(0.1067441706657919748462218234585918708035e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(0.75), 17), static_cast(0.210099765073341599847488170293985376702e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(1.0f - 1.0f/64.0f), 17), static_cast(0.7833754810186065148643778635770900387673e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(6.5f), 17), static_cast(0.3249870881262706582491835681484781298786e26L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(0.125)), static_cast(0.9771549776900515322679800891624114471814e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(0.25)), static_cast(0.1067441706657919748462218234585918708035e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(0.75)), static_cast(0.210099765073341599847488170293985376702e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7833754810186065148643778635770900387673e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17c, static_cast(6.5f)), static_cast(0.3249870881262706582491835681484781298786e26L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17a, static_cast(0.125)), static_cast(0.9771549776900515322679800891624114471814e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17a, static_cast(0.25)), static_cast(0.1067441706657919748462218234585918708035e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17a, static_cast(0.75)), static_cast(0.210099765073341599847488170293985376702e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7833754810186065148643778635770900387673e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n17a, static_cast(6.5f)), static_cast(0.3249870881262706582491835681484781298786e26L), tolerance); // // Rational functions of order 16 // static const U d17c[17] = { 7, 12, 3, 11, 10, 2, 5, 10, 4, 11, 10, 6, 2, 12, 1, 2, 1 }; static const boost::array d17a = {{ 7, 12, 3, 11, 10, 2, 5, 10, 4, 11, 10, 6, 2, 12, 1, 2, 1 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(0.125), 17), static_cast(0.1158375951946763080209403673166347533318e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(0.25), 17), static_cast(0.1082966720285644924561131930917359028989e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(0.75), 17), static_cast(0.9405394059495731884564238556014726773139e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(1.0f - 1.0f/64.0f), 17), static_cast(0.8654376623250381987950547557864849720673e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(6.5f), 17), static_cast(0.1737601600028386310221746538845672721834e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(10247.25f), 17), static_cast(0.1999804873273333726353229695741031917586e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(0.125)), static_cast(0.1158375951946763080209403673166347533318e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(0.25)), static_cast(0.1082966720285644924561131930917359028989e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(0.75)), static_cast(0.9405394059495731884564238556014726773139e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8654376623250381987950547557864849720673e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(6.5f)), static_cast(0.1737601600028386310221746538845672721834e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17c, d17c, static_cast(10247.25f)), static_cast(0.1999804873273333726353229695741031917586e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17a, d17a, static_cast(0.125)), static_cast(0.1158375951946763080209403673166347533318e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17a, d17a, static_cast(0.25)), static_cast(0.1082966720285644924561131930917359028989e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17a, d17a, static_cast(0.75)), static_cast(0.9405394059495731884564238556014726773139e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17a, d17a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8654376623250381987950547557864849720673e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17a, d17a, static_cast(6.5f)), static_cast(0.1737601600028386310221746538845672721834e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n17a, d17a, static_cast(10247.25f)), static_cast(0.1999804873273333726353229695741031917586e1L), tolerance); } template void do_test_spots17(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 17 // static const U n18c[18] = { 6, 5, 7, 8, 12, 9, 4, 1, 3, 5, 1, 5, 12, 8, 4, 6, 1, 10 }; static const boost::array n18a = {{ 6, 5, 7, 8, 12, 9, 4, 1, 3, 5, 1, 5, 12, 8, 4, 6, 1, 10 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(0.125), 18), static_cast(0.6753220299099845114199069939786568284035e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(0.25), 18), static_cast(0.7869269511546008288860321044921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(0.75), 18), static_cast(0.25590585466590709984302520751953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(1.0f - 1.0f/64.0f), 18), static_cast(0.9432688198514753127308115619023015607828e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(6.5), 18), static_cast(0.680830157865510950897216796875e15L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(0.125)), static_cast(0.6753220299099845114199069939786568284035e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(0.25)), static_cast(0.7869269511546008288860321044921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(0.75)), static_cast(0.25590585466590709984302520751953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.9432688198514753127308115619023015607828e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18c, static_cast(6.5)), static_cast(0.680830157865510950897216796875e15L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18a, static_cast(0.125)), static_cast(0.6753220299099845114199069939786568284035e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18a, static_cast(0.25)), static_cast(0.7869269511546008288860321044921875e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18a, static_cast(0.75)), static_cast(0.25590585466590709984302520751953125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.9432688198514753127308115619023015607828e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n18a, static_cast(6.5)), static_cast(0.680830157865510950897216796875e15L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(0.125), 18), static_cast(0.6079865225649211447450201991749585071453e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(0.25), 18), static_cast(0.6341988806453956744898332268528529098717e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(0.75), 18), static_cast(0.1439378129034890784564674906867431936064e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(1.0f - 1.0f/64.0f), 18), static_cast(0.8374908316692411299816073455081075151876e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(6.5f), 18), static_cast(0.4367459075155664096657376949959960997093e29L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(0.125)), static_cast(0.6079865225649211447450201991749585071453e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(0.25)), static_cast(0.6341988806453956744898332268528529098717e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(0.75)), static_cast(0.1439378129034890784564674906867431936064e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8374908316692411299816073455081075151876e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18c, static_cast(6.5f)), static_cast(0.4367459075155664096657376949959960997093e29L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18a, static_cast(0.125)), static_cast(0.6079865225649211447450201991749585071453e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18a, static_cast(0.25)), static_cast(0.6341988806453956744898332268528529098717e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18a, static_cast(0.75)), static_cast(0.1439378129034890784564674906867431936064e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8374908316692411299816073455081075151876e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n18a, static_cast(6.5f)), static_cast(0.4367459075155664096657376949959960997093e29L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(0.125), 18), static_cast(0.6638921805193691579601615933996680571626e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(0.25), 18), static_cast(0.7367955225815826979593329074114116394867e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(0.75), 18), static_cast(0.1719170838713187712752899875823242581419e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(1.0f - 1.0f/64.0f), 18), static_cast(0.8498319559814513066479820652780774757461e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(6.5f), 18), static_cast(0.6719167807931790917934426081938401533989e28L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(0.125)), static_cast(0.6638921805193691579601615933996680571626e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(0.25)), static_cast(0.7367955225815826979593329074114116394867e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(0.75)), static_cast(0.1719170838713187712752899875823242581419e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8498319559814513066479820652780774757461e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18c, static_cast(6.5f)), static_cast(0.6719167807931790917934426081938401533989e28L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18a, static_cast(0.125)), static_cast(0.6638921805193691579601615933996680571626e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18a, static_cast(0.25)), static_cast(0.7367955225815826979593329074114116394867e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18a, static_cast(0.75)), static_cast(0.1719170838713187712752899875823242581419e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8498319559814513066479820652780774757461e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n18a, static_cast(6.5f)), static_cast(0.6719167807931790917934426081938401533989e28L), tolerance); // // Rational functions of order 17 // static const U d18c[18] = { 6, 2, 11, 2, 12, 4, 1, 5, 7, 12, 5, 7, 5, 7, 5, 7, 2, 9 }; static const boost::array d18a = {{ 6, 2, 11, 2, 12, 4, 1, 5, 7, 12, 5, 7, 5, 7, 5, 7, 2, 9 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(0.125), 18), static_cast(0.1050457095586493221315235501384188635425e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(0.25), 18), static_cast(0.1082394733850278225180153358339433604182e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(0.75), 18), static_cast(0.1117650157149023587583496399377426188558e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(1.0f - 1.0f/64.0f), 18), static_cast(0.9882013696252427983431096654690843223851e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(6.5f), 18), static_cast(0.1086348665080997883580887205673821889245e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(10247.25f), 18), static_cast(0.1111097856940394090609547290690047016487e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(0.125)), static_cast(0.1050457095586493221315235501384188635425e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(0.25)), static_cast(0.1082394733850278225180153358339433604182e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(0.75)), static_cast(0.1117650157149023587583496399377426188558e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.9882013696252427983431096654690843223851e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(6.5f)), static_cast(0.1086348665080997883580887205673821889245e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18c, d18c, static_cast(10247.25f)), static_cast(0.1111097856940394090609547290690047016487e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18a, d18a, static_cast(0.125)), static_cast(0.1050457095586493221315235501384188635425e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18a, d18a, static_cast(0.25)), static_cast(0.1082394733850278225180153358339433604182e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18a, d18a, static_cast(0.75)), static_cast(0.1117650157149023587583496399377426188558e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18a, d18a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.9882013696252427983431096654690843223851e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18a, d18a, static_cast(6.5f)), static_cast(0.1086348665080997883580887205673821889245e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n18a, d18a, static_cast(10247.25f)), static_cast(0.1111097856940394090609547290690047016487e1L), tolerance); } template void do_test_spots18(T, U) { // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon() * 4 * 100; // // Polynomials of order 18 // static const U n19c[19] = { 7, 2, 4, 2, 4, 3, 9, 1, 9, 3, 7, 2, 10, 4, 2, 5, 11, 3, 9 }; static const boost::array n19a = {{ 7, 2, 4, 2, 4, 3, 9, 1, 9, 3, 7, 2, 10, 4, 2, 5, 11, 3, 9 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(0.125), 19), static_cast(0.7317509740045990140888676478425622917712e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(0.25), 19), static_cast(0.7802219584656995721161365509033203125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(0.75), 19), static_cast(0.17609299321266007609665393829345703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(1.0f - 1.0f/64.0f), 19), static_cast(0.8327888521934174049333133442289010778727e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(6.5), 19), static_cast(0.4179028813935817562572479248046875e16L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(0.125)), static_cast(0.7317509740045990140888676478425622917712e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(0.25)), static_cast(0.7802219584656995721161365509033203125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(0.75)), static_cast(0.17609299321266007609665393829345703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8327888521934174049333133442289010778727e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19c, static_cast(6.5)), static_cast(0.4179028813935817562572479248046875e16L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19a, static_cast(0.125)), static_cast(0.7317509740045990140888676478425622917712e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19a, static_cast(0.25)), static_cast(0.7802219584656995721161365509033203125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19a, static_cast(0.75)), static_cast(0.17609299321266007609665393829345703125e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8327888521934174049333133442289010778727e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n19a, static_cast(6.5)), static_cast(0.4179028813935817562572479248046875e16L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(0.125), 19), static_cast(0.7032234433238304833197011488540991991734e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(0.25), 19), static_cast(0.7141177719741940632063571816842174888595e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(0.75), 19), static_cast(0.107671418972012709727788225142148040292e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(1.0f - 1.0f/64.0f), 19), static_cast(0.7205306905267900876445365429703520869133e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(6.5f), 19), static_cast(0.1670453627683043936397442394984734181614e31L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(0.125)), static_cast(0.7032234433238304833197011488540991991734e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(0.25)), static_cast(0.7141177719741940632063571816842174888595e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(0.75)), static_cast(0.107671418972012709727788225142148040292e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7205306905267900876445365429703520869133e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19c, static_cast(6.5f)), static_cast(0.1670453627683043936397442394984734181614e31L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19a, static_cast(0.125)), static_cast(0.7032234433238304833197011488540991991734e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19a, static_cast(0.25)), static_cast(0.7141177719741940632063571816842174888595e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19a, static_cast(0.75)), static_cast(0.107671418972012709727788225142148040292e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7205306905267900876445365429703520869133e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n19a, static_cast(6.5f)), static_cast(0.1670453627683043936397442394984734181614e31L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(0.125), 19), static_cast(0.7257875465906438665576091908327935933871e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(0.25), 19), static_cast(0.7564710878967762528254287267368699554382e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(0.75), 19), static_cast(0.120228558629350279637050966856197387056e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(1.0f - 1.0f/64.0f), 19), static_cast(0.7308565745034058033214339484143259295627e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(6.5f), 19), static_cast(0.2569928657973913748303757530804975664022e30L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(0.125)), static_cast(0.7257875465906438665576091908327935933871e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(0.25)), static_cast(0.7564710878967762528254287267368699554382e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(0.75)), static_cast(0.120228558629350279637050966856197387056e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7308565745034058033214339484143259295627e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19c, static_cast(6.5f)), static_cast(0.2569928657973913748303757530804975664022e30L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19a, static_cast(0.125)), static_cast(0.7257875465906438665576091908327935933871e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19a, static_cast(0.25)), static_cast(0.7564710878967762528254287267368699554382e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19a, static_cast(0.75)), static_cast(0.120228558629350279637050966856197387056e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.7308565745034058033214339484143259295627e2L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_odd_polynomial(n19a, static_cast(6.5f)), static_cast(0.2569928657973913748303757530804975664022e30L), tolerance); // // Rational functions of order 18 // static const U d19c[19] = { 3, 2, 3, 3, 10, 6, 2, 6, 9, 8, 8, 10, 5, 7, 6, 4, 6, 9, 7 }; static const boost::array d19a = {{ 3, 2, 3, 3, 10, 6, 2, 6, 9, 8, 8, 10, 5, 7, 6, 4, 6, 9, 7 }}; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(0.125), 19), static_cast(0.2213824709533496994632324982010106870288e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(0.25), 19), static_cast(0.2063899260318829004588039751781791436716e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(0.75), 19), static_cast(0.1085337280046506127330919833145641152667e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(1.0f - 1.0f/64.0f), 19), static_cast(0.8530644127293554041631338796773621506306e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(6.5f), 19), static_cast(0.1140014406058131768268407547610620204626e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(10247.25f), 19), static_cast(0.1285594810697167354761598106316532892359e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(0.125)), static_cast(0.2213824709533496994632324982010106870288e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(0.25)), static_cast(0.2063899260318829004588039751781791436716e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(0.75)), static_cast(0.1085337280046506127330919833145641152667e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8530644127293554041631338796773621506306e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(6.5f)), static_cast(0.1140014406058131768268407547610620204626e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19c, d19c, static_cast(10247.25f)), static_cast(0.1285594810697167354761598106316532892359e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19a, d19a, static_cast(0.125)), static_cast(0.2213824709533496994632324982010106870288e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19a, d19a, static_cast(0.25)), static_cast(0.2063899260318829004588039751781791436716e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19a, d19a, static_cast(0.75)), static_cast(0.1085337280046506127330919833145641152667e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19a, d19a, static_cast(1.0f - 1.0f/64.0f)), static_cast(0.8530644127293554041631338796773621506306e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19a, d19a, static_cast(6.5f)), static_cast(0.1140014406058131768268407547610620204626e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n19a, d19a, static_cast(10247.25f)), static_cast(0.1285594810697167354761598106316532892359e1L), tolerance); } template void do_test_spots(T t, U u) { do_test_spots1(t, u); do_test_spots2(t, u); do_test_spots3(t, u); do_test_spots4(t, u); do_test_spots5(t, u); do_test_spots6(t, u); do_test_spots7(t, u); do_test_spots8(t, u); do_test_spots9(t, u); do_test_spots10(t, u); do_test_spots11(t, u); do_test_spots12(t, u); do_test_spots13(t, u); do_test_spots14(t, u); do_test_spots15(t, u); do_test_spots16(t, u); do_test_spots17(t, u); do_test_spots18(t, u); } #endif