| Karim Belabas on Fri, 19 Oct 2012 17:36:12 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: digits(0) |
* Mathieu Carbou [2012-10-19 16:46]:
> Hello,
>
> I was coding something relative to digits in base 2 and my code crashed
> when the number reached 0 because
>
> digits(0, 2) = []
> digits(0, 10) = []
>
> Whereas digits(1,2) = [1]
>
> I was expecting
>
> digits(0, 2) = [0]
> digits(0, 10) = [0]
>
> Why 0 does not deserve to be a digit ? In base 2, or b the first
> bit/digit is 1*b^0 or 0*b^0 so why it is not in the resulting vector ?
>
> Thank you :-)
In our normalization, the "0" numeral has no digit. We already have
similar behaviour for polynomials : the 0 polynomial has no
coefficients.
(17:25) gp > Vec(x + 2) \\ Vec(t_POL) returns the polynomial's coeffs
%1 = [1, 2]
(17:25) gp > Vec(Pol(1,'x))
%2 = [1]
(17:26) gp > Vec(Pol(0,'x))
%3 = []
So the current definition of digits() is consistent with what we already do.
On the other hand, it is sometimes convenient to consider polynomials
with respect to a fixed basis, and "degree drops" are inconvenient.
So Vec() has an optional argument to fix the vector length:
(17:25) gp > Vec(Pol(1,'x), 5)
%4 = [1, 0, 0, 0, 0] \\ 0*x^4 + 0*x^3 + 0*x^2 + 0*x + 1
Maybe we could provide an optional 3rd argument to digits() to add any number
of leading zeros ?
(17:26) gp > digits(3, 2, 5) \\ we want exactly 5 digits
%5 = [0, 0, 0, 1, 1]
It's rather less natural than for polynomials (which can quickly lead to
linear algebra formulations), but it's easy to add :-)
I'm neutral.
Cheers,
K.B.
--
Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation http://www.math.u-bordeaux1.fr/~belabas/
F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP]
`