Hi,
my continuous integration pipeline started reporting errors since boost version 1.90 when testing the fmod function. See for example this test run: https://gitlab.com/yade-dev/trunk/-/jobs/14168860931 search at the end for string "Error with: fmod".
The testing procedure is quite large: https://gitlab.com/yade-dev/trunk/-/blob/master/py/high-precision/_RealHPDiagnostics.cpp#L503
it is testing in a loop with 1000 random invocations of each mathematical function and compares the result against a higher precision type.
To reproduce I used this test program:
#include <iostream>
#include <boost/config.hpp>
#include <boost/core/demangle.hpp>
#include <boost/cstdfloat.hpp>
#include <boost/multiprecision/cpp_bin_float.hpp>
#include <boost/multiprecision/mpfr.hpp>
#include <boost/multiprecision/float128.hpp>
int main()
{
using std::sqrt;
using std::fmod;
double arg1g(-36.09543294408234714865102432668209L);
double arg2g(99.88277539957428530215111095458269L);
std::cout << std::setprecision(16);
std::cout << fmod(arg1g,arg2g) << "\n";
long double arg1a(-36.09543294408234714865102432668209L);
long double arg2a(99.88277539957428530215111095458269L);
std::cout << std::setprecision(18);
std::cout << fmod(arg1a,arg2a) << "\n";
boost::multiprecision::float128 arg1f("-36.09543294408234714865102432668209");
boost::multiprecision::float128 arg2f("99.88277539957428530215111095458269");
std::cout << std::setprecision(33);
std::cout << fmod(arg1f,arg2f) << "\n";
boost::multiprecision::cpp_bin_float_50 arg1b("-36.09543294408234714865102432668209");
boost::multiprecision::cpp_bin_float_50 arg2b("99.88277539957428530215111095458269");
std::cout << std::setprecision(50);
std::cout << fmod(arg1b,arg2b) << "\n";
boost::multiprecision::mpfr_float_50 arg1c("-36.09543294408234714865102432668209");
boost::multiprecision::mpfr_float_50 arg2c("99.88277539957428530215111095458269");
std::cout << std::setprecision(50);
std::cout << fmod(arg1c,arg2c) << "\n";
boost::multiprecision::cpp_bin_float_100 arg1d("-36.09543294408234714865102432668209");
boost::multiprecision::cpp_bin_float_100 arg2d("99.88277539957428530215111095458269");
std::cout << std::setprecision(100);
std::cout << fmod(arg1d,arg2d) << "\n";
boost::multiprecision::mpfr_float_100 arg1e("-36.09543294408234714865102432668209");
boost::multiprecision::mpfr_float_100 arg2e("99.88277539957428530215111095458269");
std::cout << std::setprecision(100);
std::cout << fmod(arg1e,arg2e) << "\n";
}
Using older boost version 1.83, I am getting this output:
-36.09543294408235
-36.0954329440823471
-36.0954329440823471486510243266821
-36.09543294408234714865102432668209
-36.09543294408234714865102432668209
-36.09543294408234714865102432668209
-36.09543294408234714865102432668209
While using boost 1.90 I am getting this:
-36.09543294408235
-36.0954329440823471
-36.0954329440823471486510243266821
63.7873424554919381535000866279006
-36.09543294408234714865102432668209
63.7873424554919381535000866279006
-36.09543294408234714865102432668209
Hi,
my continuous integration pipeline started reporting errors since boost version 1.90 when testing the
fmodfunction. See for example this test run: https://gitlab.com/yade-dev/trunk/-/jobs/14168860931 search at the end for string "Error with: fmod".The testing procedure is quite large: https://gitlab.com/yade-dev/trunk/-/blob/master/py/high-precision/_RealHPDiagnostics.cpp#L503
it is testing in a loop with 1000 random invocations of each mathematical function and compares the result against a higher precision type.
To reproduce I used this test program:
Using older boost version 1.83, I am getting this output:
While using boost 1.90 I am getting this: