https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121609

            Bug ID: 121609
           Summary: std::cyl_bessel_j domain error
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gibelin at unicaen dot fr
  Target Milestone: ---

Created attachment 62155
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=62155&action=edit
graph result

Dear all,

maybe it is a problem with a missing definition/documentation. 

I am trying to used the standard Bessel function:
https://en.cppreference.com/w/cpp/numeric/special_functions/cyl_bessel_j

but I have the following error for 'nu' value lower than zero:

terminate called after throwing an instance of 'std::domain_error'
  what():  Bad argument in __cyl_bessel_j.
Aborted (core dumped)

In principle Bessel functions are defined for negative orders:
https://en.wikipedia.org/wiki/Bessel_function

Again, it might be a misunderstand of my part so I tested against other
libraries (boost and gsl here, as well as mapple independently)


#include <cmath>
#include <boost/math/special_functions/bessel.hpp>
#include <gsl/gsl_sf_bessel.h>

#include <iostream>

int main()
{
  for(double l = -1.5; l<2;l+=0.5){
    for(double x=.1;x<20;x+=.1){
      double yboost = boost::math::cyl_bessel_j(l, x);
      double ystd   = l<0?NAN:std::cyl_bessel_j(l, x);
      double ygsl   = gsl_sf_bessel_Jnu(l,x);
      std::cout << x << " "
                << yboost << " "
                <<  ystd << " "
                << yboost - ystd << " "
                <<  ygsl << " "
                << ygsl - ystd << " "
                << "'v=" << l << "'"
                << std::endl;
    }
    std::cout << std::endl  << std::endl ;
  }

}

I compiled with:

g++ -Wextra -Wall -fno-strict-aliasing -fwrapv -I/usr/include/ -c bessel_j.C 
g++ -Wall -Wextra -fno-strict-aliasing -fwrapv -L/usr/lib/ bessel_j.o  -lgsl
-lgslcblas -lm

I had to exclude of course negative orders for std::cyl_bessel_j, the result 
in attached file shows that the other numerical values are compatible. 

Regards

Reply via email to