📄 test_rational.hpp
字号:
// (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 <boost/test/floating_point_comparison.hpp>#include <boost/test/test_exec_monitor.hpp>#include <boost/array.hpp>#include <boost/math/tools/rational.hpp>#include <boost/math/tools/precision.hpp>template <class T, class U>void do_test_spots1(T, U){ // // Tolerance is 4 eps expressed as a persentage: // T tolerance = boost::math::tools::epsilon<T>() * 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<U, 1> n1a = { 2 }; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.125), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.25), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.75), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(1.0f - 1.0f/64.0f), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(6.5), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(10247.25), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.125)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.25)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.75)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(1.0f - 1.0f/64.0f)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(6.5)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(10247.25)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(0.125)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(0.25)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(0.75)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(1.0f - 1.0f/64.0f)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(6.5)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(10247.25)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.125), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.25), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.75), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(1.0f - 1.0f/64.0f), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(6.5f), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(10247.25f), 1), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.125)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.25)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.75)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(1.0f - 1.0f/64.0f)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(6.5f)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(10247.25f)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(0.125)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(0.25)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(0.75)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(1.0f - 1.0f/64.0f)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(6.5f)), static_cast<T>(0.2e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(10247.25f)), static_cast<T>(0.2e1L), tolerance); // // Rational functions of order 0 // static const U d1c[1] = { 3 }; static const boost::array<U, 1> d1a = { 3 }; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.125), 1), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.25), 1), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.75), 1), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(1.0f - 1.0f/64.0f), 1), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(6.5f), 1), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(10247.25f), 1), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.125)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.25)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.75)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(1.0f - 1.0f/64.0f)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(6.5f)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(10247.25f)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(0.125)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(0.25)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(0.75)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(1.0f - 1.0f/64.0f)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(6.5f)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(10247.25f)), static_cast<T>(0.6666666666666666666666666666666666666667e0L), tolerance); // // Polynomials of order 1 // static const U n2c[2] = { 3, 1 }; static const boost::array<U, 2> n2a = { 3, 1 }; BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.125), 2), static_cast<T>(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.25), 2), static_cast<T>(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.75), 2), static_cast<T>(0.375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(1.0f - 1.0f/64.0f), 2), static_cast<T>(0.3984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(6.5), 2), static_cast<T>(0.95e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(10247.25), 2), static_cast<T>(0.1025025e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.125)), static_cast<T>(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.25)), static_cast<T>(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.75)), static_cast<T>(0.375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(1.0f - 1.0f/64.0f)), static_cast<T>(0.3984375e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(6.5)), static_cast<T>(0.95e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(10247.25)), static_cast<T>(0.1025025e5L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(0.125)), static_cast<T>(0.3125e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(0.25)), static_cast<T>(0.325e1L), tolerance); BOOST_CHECK_CLOSE( boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(0.75)), static_cast<T>(0.375e1L), tolerance);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -