Verify distribution uniformity/Naive: Difference between revisions

GP
m (link)
(GP)
Line 485:
) h;
;;</lang>
 
=={{header|PARI/GP}}==
This tests the purportedly random 7-sided die with a slightly biased 1000-sided die.
<lang parigp>dice5()=random(5)+1;
dice7()={
my(t);
while((t=dice5()*5+dice5()) > 21,);
(t+2)\3
};
 
cumChi2(chi2,dof)={
my(g=gamma(dof/2));
incgam(dof/2,chi2/2,g)/g
};
 
test(f,n,alpha=.05)={
v=vector(n,i,f());
my(s,ave,dof,chi2,p);
s=sum(i=1,n,v[i],0.);
ave=s/n;
dof=n-1;
chi2=sum(i=1,n,(v[i]-ave)^2)/ave;
p=cumChi2(chi2,dof);
if(p<alpha,
error("Not flat enough, significance only "p)
,
print("Flat with significance "p);
)
};
 
test(dice7, 10^5)
test(()->if(random(1000),random(1000),1), 10^5)</lang>
 
Output:
<pre>Flat with significance 1.000000000000000000
 
### user error: Not flat enough, significance only 5.391077606003910233 E-3500006</pre>
 
=={{header|PicoLisp}}==