function [d, c] = dectobin (mantissa, espon)
%
% [d, c] = dectobin (mantissa, espon)
%
% Converte un numero decimale in binario. Il numero decimale va
% rappresentato come mantissa * 10 ^ (espon). Il risultato e` mostrato
% come cifre intere (d) e cifre dopo la virgola (c). Per
% esempio:
%
% > [d, c] = dectobin (125, -3)
%
% restituisce
%
% > d = 0
% > c = [0, 0, 1]
%
% perche' 0.125 in base 10 e` 0.001 in base 2. Ovviamente tale
% notazione non e` normalizzata.
numero = mantissa * 10 ^ espon;
parte_int = floor (numero);
n = 1;
d = 0;
while (parte_int ~= 0)
  d(n) = mod (parte_int, 2);
  parte_int = floor (parte_int / 2);
  n = n + 1;
end
d = fliplr (d);
parte_dec = (mantissa - floor (numero) * 10 ^ (-espon)) * 10 ^ espon;
%parte_dec = numero - floor (numero)
m = 1;
c = 0;
while (parte_dec ~= 0)
  c(m) = floor (2 * parte_dec);
  parte_dec = 2 * parte_dec - c(m);
  m = m + 1;
end
%!test
%! [d, c] = dectobin (125, -3);
%! assert (d, 0)
%! assert (c, [0, 0, 1])
%!test
%! [d, c] = dectobin (3427, -2);
%! assert (d, [1, 0, 0, 0, 1, 0])
%! assert (c, [0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, ...
%! 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, ...
%! 0, 0, 0, 1, 0, 1, 0, 0, 1])
%!test
%! [d, c] = dectobin (888178419700125184, -33);
%! assert (c, [zeros(1, 49), 1])
%!demo
%! [d, c] = dectobin (888178419700125184, -33)
%!demo
%! [d, c] = dectobin (800000000000000000, -33)
