Numeración de base cero


La numeración basada en cero es una forma de numeración en la que al elemento inicial de una secuencia se le asigna el índice 0, en lugar del índice 1, como es típico en circunstancias cotidianas no matemáticas o no relacionadas con la programación . En la numeración basada en cero, el elemento inicial a veces se denomina elemento cero , [1] en lugar del primer elemento; de orden cero es una acuñado número ordinal correspondiente al número cero. En algunos casos, un objeto o valor que no pertenece (originalmente) a una secuencia dada, pero que podría colocarse naturalmente antes de su elemento inicial, puede denominarse elemento cero. No existe un amplio acuerdo con respecto a la exactitud de usar cero como ordinal (ni con respecto al uso del término cero ), ya que crea ambigüedad para todos los elementos posteriores de la secuencia cuando carecen de contexto.

Las secuencias de numeración que comienzan en 0 es bastante común en la notación matemática, en particular en la combinatoria , aunque los lenguajes de programación para matemáticas generalmente indexan desde 1. [2] [3] [4] En informática , los índices de matriz generalmente comienzan en 0 en los lenguajes de programación modernos , por lo que los programadores de computadoras pueden usar cero en situaciones en las que otros pueden usar primero , y así sucesivamente. En algunos contextos matemáticos, la numeración basada en cero se puede utilizar sin confusión, cuando las formas ordinales tienen un significado bien establecido con un candidato obvio antes que primero ; por ejemplo un derivado cerode una función es la función en sí, obtenida diferenciando cero tiempos. Tal uso corresponde a nombrar un elemento que no pertenece propiamente a la secuencia pero que la precede: la derivada cero no es realmente una derivada. Sin embargo, así como la primera derivada precede a la segunda derivada , también la derivada cero (o la función original en sí) precede a la primera derivada .

Martin Richards , creador del lenguaje BCPL (un precursor de C ), diseñó arreglos que se inician en 0 como la posición natural para comenzar a acceder al contenido del arreglo en el lenguaje, ya que el valor de un puntero p usado como dirección accede a la posición p + 0 en la memoria. [5] [6] BCPL se compiló por primera vez para el IBM 7094 ; el lenguaje no introdujo búsquedas de direccionamiento indirecto en tiempo de ejecución , por lo que la optimización de direccionamiento indirecto proporcionada por estas matrices se realizó en tiempo de compilación. [6] No obstante, la optimización fue importante. [6] [7]

Edsger W. Dijkstra escribió más tarde una nota pertinente ¿Por qué la numeración debería comenzar en cero [8] en 1982, analizando los posibles diseños de índices de matriz encerrándolos en una desigualdad encadenada, combinando desigualdades nítidas y estándar en cuatro posibilidades, demostrando eso a su convencimiento? Las matrices basadas en cero se representan mejor mediante rangos de índices que no se superponen, que comienzan en cero, aludiendo a intervalos abiertos, semiabiertos y cerrados como con los números reales. Los criterios de Dijkstra para preferir esta convención son en detalle que representa secuencias vacías de una manera más natural ( ai < a  ?) Que "intervalos" cerrados ( ai ≤ (a −1)?), y que con "intervalos" semiabiertos de naturales, la longitud de una subsecuencia es igual al límite superior menos el límite inferior ( ai < b da ( b - a ) valores posibles para i , con a , b , i todos enteros).

Este uso se deriva de las opciones de diseño integradas en muchos lenguajes de programación influyentes , incluidos C , Java y Lisp . En estos tres, los tipos de secuencia (matrices C, matrices y listas Java y listas y vectores Lisp) se indexan comenzando con el subíndice cero. Particularmente en C, donde las matrices están estrechamente ligadas a la aritmética de punteros , esto hace que la implementación sea más simple: el subíndice se refiere a un desplazamiento desde la posición inicial de una matriz, por lo que el primer elemento tiene un desplazamiento de cero.