函数gsl_cdf_ugaussian_Pinv的错误结果

时间:2014-05-12 17:11:05

标签: gsl

我运行这个程序:

#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

我做错了吗?

2 个答案:

答案 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(向下滚动到底部)。