% Les bits d'une variable aléaoire de loi uniforme sur [0,1]
% suivent des lois de Bernoulli indépendantes de paramètre 1/2.
% L'i.i.d. est toujours vrai pour l'écriture en base B quelconque.
%
% En effet, l'ensemble des nombres B-adiques de [0,1] (i.e. les 
% nombres à développement fini en base B) est de mesure 
% nulle pour la loi uniforme. On peut donc se restreindre aux nombres 
% avec un développement en base B infini, c'est à dire que l'on peut 
% éliminer les développements qui sont constants à partir d'un certain rang. 
% Maintenant, si U s'écrit 0,u1 u2 ... en base B, alors pour tout 
% entier n et pour pour tout b1,...,bn dans 0,...,B-1, on a :
% P(u1=b1,...,un=bn) = P(x(b) <= U <= x(b)+B^-n) = B^-n,
% où x(b) := b1 B^-1 + ... + bn B^-n.
% 
% Cette constatation permet de construire un générateur aléatoire de
% n v.a. discrètes uniformes sur {0,...n-1} à partir de celui d'une
% loi uniforme (de précision >= n).
%

clear;
more off;
nr=10000;
prec=5;
base=2;
sprintf('Génération de %d réalisations indép. de loi unif. sur [0,1]. Patience...\n',nr)
V=round(rand(nr,1)*base^prec);
sprintf('Conversion en base %d et précision %d. Patience...\n',base,prec)
W(1:nr,1:prec+1)=0;
for i=1:nr,
  x=V(i);
  for j=prec:-1:0,
 	W(i,prec-j+1)=floor(x/base^j);
 	x=mod(x,base^j);
  end
end
W=W(1:nr,2:prec+1);

%% Ce qui suit est spécifique à Octave
%% Avec octave, on peut remplacer sprintf(...) par printf(...);

sprintf('Matrice des corrélations de l''écriture en base %d :\n',base)
cor(W)
vartheo=(base-1)*(2*base-1)/6-(base-1)^2/4; 
sprintf('Vecteur des variances correspondant (théorie = %f) :\n',vartheo)
diag(cov(W))
% Test d'adéquation et d'indépendance de KS et du Chi-deux

