将Pascal程序转为C程序

来源:百度知道 编辑:UC知道 时间:2024/06/17 05:42:42
Function ZfromP(P:real) :real;
(* inverse of cumulative normal, returns -999 for P<1.0e-12, 999 for P>1 - 1.0e-12, 3
decimal place accuracy otherwise *)
var T1, T2, Z :real; Zsign :integer;
begin
if P > 0.5 then
begin
P :=1 - P; Zsign :=1;
end
else Zsign :=-1;
if P < 1.0e-12 then Z :=999
else
begin
T1 := -2*ln(P); T2 := sqrt(T1);
Z := T2 - (2.515517 + 0.802853*T2 + 1.0328e-2*T1)/
(1.0 + 1.432788*T2 + 1.308e-3*T1*T2);
end; (* else *)
ZfromP := Zsign*Z;
end; (* Zfrom P *)

请将上述程序转为C程序,我没学过Pascal 分不多了,只剩5分了,请谅解啊

double ZfromP(double P)
/* inverse of cumulative normal, returns -999 for P<1.0e-12, 999 for P>1 - 1.0e-12, 3
decimal place accuracy otherwise */
{
double T1,T2,Z;
int Zsign;

if P > 0.5
{
P =1 - P; Zsign =1;
}
else
{Zsign =-1;}

if P < 1.0e-12
{Z=999;}
else
{
T1 = -2*ln(P); T2 = sqrt(T1);
Z = T2 - (2.515517 + 0.802853*T2 + 1.0328e-2*T1)/
(1.0 + 1.432788*T2 + 1.308e-3*T1*T2);
}/* else */
ZfromP = Zsign*Z;
} // Zfrom P

void ZfromP(double P)
{
double T1,T2,Z;
long Zsign;

if(P > 0.5)
{
P = 1 - P;
Zsign = 1;
}
else Zsign = -1;
if(P < 1.0e-12) Z = 999;
else
{
T1 = -2*ln(P);
T2 = sqrt(T1);
Z = T2 - (20515517 + 0.802853*T2 + 1.0328e-2*T1)