Would that fit:
Code:
0>> normald_icdf(0.8)
0.841621233573
// Time 0
1>> normald_icdf(0.8,left)
0.841621233573
// Time 0
2>> normald_icdf(0.8,right)
-0.841621233573
// Time 0
3>> normald_icdf(0.8,center)
[-1.28155156554,1.28155156554]
// Time 0
4>> normald_icdf(0.8,tail)
[-0.253347103136,0.253347103136]
// Time 0
0>> normald_icdf(1,2,.8,left)
2.68324246715
// Time 0
1>> normald_icdf(1,2,.8,right)
-0.683242467146
// Time 0
2>> normald_icdf(1,2,.8,center)
[-1.56310313109,3.56310313109]
// Time 0
3>> normald_icdf(1,2,.8,tail)
[0.493305793728,1.50669420627]
// Time 0
source code:
Code:
gen _normal_icdf(const gen & g,GIAC_CONTEXT){
if ( g.type==_STRNG && g.subtype==-1) return g;
if (g.type!=_VECT)
return normal_icdf(g,contextptr);
vecteur v=*g._VECTptr;
int s=v.size();
if (s==2 && (v.back()==at_left || v.back()==at_right || v.back()==at_centre|| v.back()==at_tail)){
v=makevecteur(0,1,v[0],v[1]);
s=4;
}
if (s<3)
return gensizeerr(contextptr);
if (s==4 && v.back()==at_centre)
v[2]=(1-v[2])/2;
if (s==4 && v.back()==at_tail)
v[2]=v[2]/2;
gen g2(normal_icdf(v[2],contextptr));
gen g1=v[0]-v[1]*g2;
g2=v[0]+v[1]*g2;
if (s==4 && (v.back()==at_centre || v.back()==at_tail))
return makevecteur(g2,g1);
if (s==4 && v.back()==at_right)
return g1;
return g2;
}