# HG changeset patch # User Gunnar Farneback # Date 1287693686 -7200 # Node ID 43a1e9d5e7615b4843b8b0829d4966703eedc881 # Parent 1029a945430dbded686ec901c1ac9fafcc385af6 Give correct results for large integers in dec2base. diff -r 1029a945430d -r 43a1e9d5e761 scripts/ChangeLog --- a/scripts/ChangeLog Thu Oct 21 22:38:49 2010 +0200 +++ b/scripts/ChangeLog Thu Oct 21 22:41:26 2010 +0200 @@ -1,3 +1,7 @@ +2010-10-21 Gunnar Farneback + + * strings/dec2base.m: More robust algorithm. + 2010-10-21 Gunnar Farneback * general/interp2: New tests. diff -r 1029a945430d -r 43a1e9d5e761 scripts/strings/dec2base.m --- a/scripts/strings/dec2base.m Thu Oct 21 22:38:49 2010 +0200 +++ b/scripts/strings/dec2base.m Thu Oct 21 22:41:26 2010 +0200 @@ -84,9 +84,11 @@ endif ## determine digits for each number - power = ones (length (n), 1) * (base .^ (max_len-1 : -1 : 0)); - n = n(:) * ones (1, max_len); - digits = floor (double (rem (n, base*power)) ./ power); + digits = zeros (length (n), max_len); + for k = max_len:-1:1 + digits(:,k) = mod(n, base); + n = round ((n - digits(:,k)) / base); + endfor ## convert digits to symbols retval = reshape (symbols (digits+1), size (digits)); @@ -132,3 +134,6 @@ %!test %! assert(dec2base(2^51-1,2), %! '111111111111111111111111111111111111111111111111111'); + +%!test +%! assert(dec2base(uint64(2)^63-1,16), '7FFFFFFFFFFFFFFF');