Disable some tests when the exponent range is greater than that of the reference type. Fix up a few other warnings.

This commit is contained in:
jzmaddock
2020-10-22 19:55:29 +01:00
parent 699f06f637
commit f2e7d3d65a
4 changed files with 8 additions and 17 deletions

View File

@@ -1,7 +1,8 @@
@import url('../../../../doc/src/boostbook.css');
/* Contains the basic settings for BoostBook and used by Quickbook to docbook conversion. */
/* Note:this import link assumes called from doc/html, not from any backup copy in /doc. */
/* Note:this import link assumes called from libs/multiprecision/doc/html, not from any backup copy in libs/multiprecision/doc. */
/* boost-no-inspect */
@import url('../../../../doc/src/boostbook.css');
/*=============================================================================
Copyright (c) 2004 Joel de Guzman http://spirit.sourceforge.net/

View File

@@ -357,7 +357,6 @@ void eval_cos(T& result, const T& x)
typedef typename boost::multiprecision::detail::canonical<boost::int32_t, T>::type si_type;
typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
typedef typename mpl::front<typename T::float_types>::type fp_type;
switch (eval_fpclassify(x))
{
@@ -467,9 +466,6 @@ void eval_cos(T& result, const T& x)
const bool b_zero = eval_get_sign(xx) == 0;
// Check if the reduced argument is very close to 0.
const bool b_near_zero = xx.compare(fp_type(1e-1)) < 0;
if (b_zero)
{
result = si_type(0);

View File

@@ -50,7 +50,7 @@
template <class T>
void test()
{
using mpfr_float_1000 = boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<1000> >;
typedef boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<1000> > mpfr_float_1000;
for (int n = -20; n <= 20; ++n)
{
@@ -102,12 +102,10 @@ int main()
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
/* These fail since our exponent range is greater than that of mpfr which we use for comparison:
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<char> > > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<char> > > >();
*/
// Check low multiprecision digit counts.
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();

View File

@@ -50,13 +50,15 @@
template <class T>
void test()
{
using mpfr_float_1000 = boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<1000> >;
typedef boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<1000> > mpfr_float_1000;
for (int n = -20; n <= 20; ++n)
for (int n = 0; n <= 20; ++n)
{
std::cout << "Testing n = " << n << std::endl;
T boundary = boost::math::constants::half_pi<T>() * n;
T val = boundary;
if((n == 0) && ((std::numeric_limits<T>::min_exponent <= std::numeric_limits<mpfr_float_1000>::min_exponent) || (!std::numeric_limits<T>::is_specialized)))
continue;
for (unsigned i = 0; i < 200; ++i)
{
mpfr_float_1000 comparison(val);
@@ -64,10 +66,6 @@ void test()
T found = sin(val);
T expected = T(comparison);
BOOST_CHECK_LE(boost::math::epsilon_difference(found, expected), 20);
//std::cout << std::setprecision(10) << val << std::endl;
//std::cout << std::setprecision(50) << found << std::endl;
//std::cout << std::setprecision(50) << comparison << std::endl;
//std::cout << std::setprecision(50) << expected << std::endl;
val = boost::math::float_next(val);
}
val = boundary;
@@ -102,12 +100,10 @@ int main()
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
/* These fail since our exponent range is greater than that of mpfr which we use for comparison:
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<char> > > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<char> > > >();
*/
// Check low multiprecision digit counts.
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();