C GSL贝塞尔函数示例

C GSL贝塞尔函数示例,c,gsl,C,Gsl,我尝试了以下代码: # include <stdio.h> # include <gsl/gsl_sf_bessel.h> int main (void) { double x = 5.0; double y = gsl_sf_bessel_j0 (x); printf ("JO(%g) = %.18e\n", x , y); return(0); } GSL手册中给出的结果为 -1.775967713143382920e-01 你知道怎么回事吗?我觉得这

我尝试了以下代码:

# include <stdio.h> 
# include <gsl/gsl_sf_bessel.h> 
int main (void)
{
double x = 5.0; 
double y = gsl_sf_bessel_j0 (x); 
printf ("JO(%g) =  %.18e\n", x , y);
return(0);
}
GSL手册中给出的结果为

-1.775967713143382920e-01 

你知道怎么回事吗?

我觉得这确实像个虫子。我似乎还没有按照计划把它修好。然而,有两个可能的原因:

  • 文件中的打字错误。您应该使用gsl_sf_bessel_j0(非常奇怪的命名),而不是gsl_sf_bessel_j0。这就给了你
    JO(5)=-1.775967713143382642e-01
    ,这已经足够接近你想要的答案了(不过我不确定准确度)
  • 文档是正确的,我们需要修复函数本身

不管怎么说,由于没有报告,我已经提交了一份bug报告。我确实计划在得到与此问题相关的任何信息后立即更新此答案

更多信息,我正在使用一个带有“el capitan”的Mac,我是这样编译的:clang-L/opt/local/lib-lgsl main.o-o besselI可以重现您的结果。与另外两个J0函数的实现相比,我倾向于认为GSL中存在缺陷。
-1.775967713143382920e-01