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: