Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to use cmath Bessel functions with Mac

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

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

#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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading