我运行这个程序:
#include <gsl/gsl_math.h>
#include <stdio.h>
int main(){
double x= 0.5;
double res = gsl_cdf_ugaussian_Pinv(x);
printf("icdf(%f)=%f\n",x,res);
return 0;
}
由于某种原因,输出为: icdf(0.500000)= 1.000000
哪个错了,应该是: icdf(0.500000)= 0.000000
我做错了吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
头文件gsl/gsl_math.h
不包含概率分布函数的原型。这意味着编译器没有看到gsl_cdf_ugaussian_Pinv(x)
的声明,因此它认为函数返回一个整数。当我编译你的代码时,我收到一个警告,当我运行它时,我得到:
icdf(0.500000)=256835073.000000
这显然是错误的。当我改变这个
#include <gsl/gsl_math.h>
到
#include <gsl/gsl_cdf.h>
文件编译时没有任何警告,并给出:
icdf(0.500000)=0.000000
正如所料。
有关其他示例,请参阅http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Distribution-Examples.html#Random-Number-Distribution-Examples(向下滚动到底部)。