How to use cmath Bessel functions with Mac

Advertisements

So I am using Mac with the developer tools coming from XCode and according to other answers I should compile using something like:

g++ --std=c++17  test.cpp -o test

or using clang++ but I still I am having trouble making the script find the special functions. What else can I try?

Minimum example

#include <cmath>
#include <iostream>

int main(int argc, char *argv[]){
  double x = 0.5;
  double y = std::cyl_bessel_k(2,x);
  std::cout << "x="<<x <<" -> y(x)="<<y <<std::endl;
  return 0;
}

Error

main2.cpp:6:19: error: no member named 'cyl_bessel_k' in namespace 'std'
  double y = std::cyl_bessel_k(2,x);
             ~~~~~^
1 error generated.

clang++ version 13.0.0

>Solution :

https://en.cppreference.com/w/cpp/numeric/special_functions/cyl_bessel_j says:

Notes

Implementations that do not support C++17, but support ISO 29124:2010,
provide this function if __STDCPP_MATH_SPEC_FUNCS__ is defined by
the implementation to a value at least 201003L and if the user
defines __STDCPP_WANT_MATH_SPEC_FUNCS__ before including any
standard library headers.

Implementations that do not support ISO 29124:2010 but support TR
19768:2007 (TR1), provide this function in the header tr1/cmath and
namespace std::tr1.

Armed with your compiler version, I checked https://en.cppreference.com/w/cpp/compiler_support/17#C.2B.2B17_library_features and saw that neither Apple clang nor clang++’s own stdlib have these functions. Bad news! You’ll need to get them e.g. from boost, or by implementing them yourself. The example on https://en.cppreference.com/w/cpp/numeric/special_functions/cyl_bessel_j actually does have an implementation for you.

Leave a ReplyCancel reply