From: Lie Ryan on
Sorry the message gets cuts off by an accidental press of send button.

On 08/14/10 04:31, Lie Ryan wrote:
> On 08/10/10 06:36, Bartc wrote:
>> And if the context is Python, I doubt whether the choice of 0-based over a
>> 1-based makes that much difference in execution speed.
>
> And I doubt anyone cares about execution speed when deciding whether to
> use 1-based or 0-based array. The reason why you want to choose the
> alternative that use less conversion to the other system is to simplify
> the source code.
>
> Many common mathematical/physics/economics formulas are expressed much
> simply if we use 0-based counting:
>
> * arithmetic series:
> - 1-based: s(n) = a + (n - 1) * d
> - 0-based: s(n) = a + n * d
> * geometric series:
> - 1-based: g(n) = a * r**(n - 1)
> - 0-based: g(n) = a * r**n
> * equation of motion:
> - 1-based: x(t) = a + 1/2 * a * (t - 1)**2
> - 0-based: x(t) = a + 1/2 * a * t**2
> * exponential growth/decay:
> - 1-based: d(t) = a * e**(k * (t - 1))
> - 0-based: d(t) = a * e**(k*t)
>
>
> In fact, most textbooks would already uses 0-based formula for some of
> these formulas already. Most physics and economic textbooks would show
> the base 0 variation of the formula, and refers to t=0 as the point in
> time where the "event" started.
>
> I often used this model of thinking for 0-based array indices (and
> negative indices):
>
> -7 -6 -5 -4 -3 -2 -1
> +---+---+---+---+---+---+---+
> | c | h | a | r | l | i | e |
> +---+---+---+---+---+---+---+
> 0 1 2 3 4 5 6 (7)
>
> instead of:
>

so to repeat, I often use this model of thinking:

-7 -6 -5 -4 -3 -2 -1
+---+---+---+---+---+---+---+
| c | h | a | r | l | i | e |
+---+---+---+---+---+---+---+
0 1 2 3 4 5 6 (7)

instead of:

-7 -6 -5 -4 -3 -2 -1
+---+---+---+---+---+---+---+
| c | h | a | r | l | i | e |
+---+---+---+---+---+---+---+
0 1 2 3 4 5 6

that is, the indices refers to the "gap" between the array entries. The
"gap index" model highlights the naturalness of using 0-based array,
negative indices, array slicing, and half-open.

From: Terry Reedy on
On 8/13/2010 11:27 AM, Den wrote:

>
> I smile every time I see the non-nonsensical sentence "The first
> thing, therefore, is in thing[0]" in a programming language learning
> book or tutorial. I laugh every time I hear someone defend that as
> common sense.

If one thinks in terms of slicing at gap positions, the 'proper' indexes
would range from 0.5 (average of 0 and 1) to n-0.5. For convenience, we
round down or up. To put it another way, seq[n:n+1] is abbreviated as
either seq[n] or seq[n+1]. Put this way, the first choice is at least as
sensible as the second.

Given that Python allows indexing from both end, I prefer 0,1,2,... and
-1,-2,-3,... to 1,2,3... and 0,-1,-2,... or 1,2,3,... and -1,-2,-3.

As someone else pointed out, discretizing a continuous variable starting
at 0 gives 0,1,2,... so having indexes that match is handy.

If a problem is formulated in terms of 1,2,3, one can simply leave the
first cell blank rather than reformulate. If a problem is formulated in
terms of 0,1,2,... and indexes are 1 based, then one must reformulate.

> Every three year old watching Sesame Street knows
> counting things starts with '1', not '0'.

And that is the same mistake that most societies make, the mistake that
put a lid on Greak math, science, and finance. All fresh counts begin
with 0. Counting by people usually begins with a silent 0, just as fresh
tallies begin with a blank stick or paper.

But not always. For instance, lets count the people who have, up to noe,
become billionaires with Python. We start with an overt 0. Now we can
discuss whether the founders of Google should increase that to 2.

Mechanical counting requires an overt 0. A car odometer starts at 0, not
1 and not . Have you never written a counting program? Starting with n
= 1 instead of n = 0 before counting the first item would be a bad bug.

> There may be loads of reasons for it, but don't throw common sense
> around as one of them.

I won't. Only a few (about 3 or 4) societies included a proper 0 in
their number systems.

--
Terry Jan Reedy

From: Ian Kelly on
On Fri, Aug 13, 2010 at 11:53 AM, Martin Gregorie
<martin(a)address-in-sig.invalid> wrote:
> In a higher level language 1-based indexing is just as limiting as 0-
> based indexing. What you really want is the ability to declare the index
> range to suit the problem: in Algol 60 it is very useful to be able to
> declare something like:
>
>        real sample[-500:750];

Ugh, no. The ability to change the minimum index is evil. I don't
much care whether a high-level language uses 0-based or 1-based
indexing, but I do care that it is consistent. On the occasions when
I am forced to use Visual Basic, the single biggest wart that drives
me up a wall is constantly having to figure out whether the particular
thing that I am currently indexing is 0-based or 1-based.

Cheers,
Ian