Karim Belabas on Fri, 19 Oct 2012 17:36:12 +0200

 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

(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]
`

```

• Follow-Ups:
• Re: digits(0)
• From: Mathieu Carbou <mathieu.carbou@gmail.com>
• Re: digits(0)
• From: Bill Allombert <Bill.Allombert@math.u-bordeaux1.fr>
• References:
• digits(0)
• From: Mathieu Carbou <mathieu.carbou@gmail.com>