Appel:
rand(expression)Paramètres:
expression - (optionnel) un entier ou un intervalle :
- si l'expression est absente, le résultat sera un nombre à 12 digits
- si l'expression est un entier n, le résultat sera une procédure permettant de générer aléatoirement des nombres entre entier entre 0 et n-1
- si l'expression est un intervalle a..b, le résultat sera une procédure permettant de générer aléatoirement des nombres entre entier entre a et b
Exemples
> rand(); 427419669081 >rand(); 321110693270 >die := rand(1..6): >die(); 4 >die(); 6

intmonte:=proc(f,a,b,N)
local i,al,bl,m,F,aleaabs,aleaord,estaudessous;
m:=round(max(a,b)*10^4);
al:=round(a*10^4);
bl:=round(b*10^4);
aleaabs:=rand(al..bl);
aleaord:=rand(0..m);
F:=0;
for i from 1 to N do
estaudessous:=(f(aleaabs()/10^4)-aleaord()/10^4)>=0;
if estaudessous then F:=F+1 fi
od:
RETURN((b-a)*max(a,b)*F/N)
end:
estalinterieur:=proc(x,y) x^2+y^2<1 end:
calculepi:=proc(N)
local i,F,abs,ord,alea,erreur,result;
alea:=rand(-10^4..10^4);
F:=0;
for i from 1 to N do
abs:=alea()/10^4;ord:=alea()/10^4;
if estalinterieur(abs,ord) then
F:=F+1;
fi
od;
RETURN(4*F/N)
end:
zero:=proc(f,a,b,pre)
local M;
M:=f((a+b)/2);
if abs(M)<pre then RETURN((a+b)/2)
elif M>0 then zero(f,a,(a+b)/2,pre)
else zero(f,(a+b)/2,b,pre)
fi
end:
trouve:=proc(T,D,F,z)
local m;
if abs(F-D)=1 then
if T[F]=z then
RETURN(F)
elif T[D]=z then
RETURN(D)
else
RETURN(NULL)
fi
fi;
m:=round((D+F)/2);
if T[m]=z then RETURN(m)
elif T[m]<z then trouve(T,m+1,F,z)
else trouve(T,D,m-1,z)
fi
end: