function fd = firstdigit(x,b,convert)
%fd = firstdigit(x,b)
% Renvoie le premier chiffre non nul dans l'écriture en base b
% de x, en partant de la gauche.
% * x doit être un vecteur de réels >0 pas trop grands.
% * b doit être un entier entre 2 et 36
%     36 = 10 + 26, histoire de pouvoir écrire avec l'alphabet...
%     ce paramètre est optionnel et vaut par défaut 10.
% * convert est un paramètre optionnel valant par défaut 0.
%   si convert n'est pas nul, la sortie fd est un entier correspondant
%   à la valeur en base 10 du premier chiffre, alors que si convert est 
%   nul (par défaut), la sortie fd est un caractère alphanumérique.

%%% base 10 par défaut
if (nargin==1), b=10; end     
%%% si dépassement, on sort avec une erreur
if ~(ceil(b)==b & b>1 & b<37)
 error('b n''est pas un entier entre 2 et 36'); 
end
%%% si x n'est pas positif, on prend sa valeur absolue
if ~(x>0)
 warning('x n''est pas positif, il est remplace par -x'); 
 x=-x;
end
x=reshape(x,[1,length(x)]);
%%% décalage de x en base b tel que y>=1 en base b
y=x.*b.^ceil(-log(x)/log(b)); 
%%% si dépassement, on sort avec une erreur
if isinf(y) | isnan(y) | ~isreal(y), 
 error('x trop petit ou trop grand par rapport à b'); 
end
c=floor(y);                 % c = premier chiffre en base 10
s=dec2base(c,b);            % conversion en base b
if nargin==3,
  if convert, 
	fd=base2dec(s(:,1),b);  % valeur en base 10 du premier caractère
  end
else 
  fd=s(:,1);                % Premier caractère en base b.
end
return;
