function  rf = rfrac(prob,n,m,prec)
%RFRAC générateur aléatoire de nombres b-adiques
%rf=rfrac(prob,n,m,prec)
% Renvoie une matrice n x m de réels b-adiques de [0,1[
% où b=length(prob), de précision prec, tels que les b
% coefficients de leur écriture en base b sont i.i.d. de loi prob.
% * Tous les paramètres sont optionnels
% * prob est un vecteur de probabilité discrète valant par défaut 
%   [1/2,1/2] et donc b=2 (Bernoulli symétrique)
% * n et m sont des entiers >0, par défaut, n=1 et m=1 
% * prec est un entier >0 valant par défaut 10.
%RFRAC fait appel à RDIST.

if (nargin==0), prob=[1/2,1/2]; n=1; m=1; prec=10;
elseif (nargin==1), n=1; m=1; prec=10; 
    elseif (nargin==2), m=1; prec=10;  
        elseif (nargin ==3), prec=10;
end
prob=reshape(prob,[1,length(prob)]);
if (~isreal(prec) | ~isreal(n) | ~isreal(m) | ~isreal(prob))
 error('prob, prec, n et m doivent etre des nombres');
end
if ~(all(prob>=0) & (abs(sum(prob)-1)<1e-5)), 
 error('prob n''est pas une probabilite');
end
if ~(ceil([prec,n,m]) == [prec,n,m])
 error('prec, n et m doivent etre des entiers');
end
if ~([prec,n,m]>0)
 error('prec, n et m doivent etre > 0');
end
b=length(prob);
for i=1:n,
 for j=1:m,
  for k=1:prec,
   X(k)=rdist([0:b-1],prob);
  end
  rf(i,j)=dot(X,b.^[-1:-1:-prec]);
 end
end
return;