Articulo de referencia

Numeración basada en 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 cir...

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, al elemento inicial a veces se le denomina elemento cero , [ 1 ] en lugar del primer elemento; cero es un término acuñado para el número ordinal 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 consenso sobre la corrección del uso del cero como ordinal (ni sobre el uso del término cero ), ya que crea ambigüedad para todos los elementos subsiguientes de la secuencia cuando carece de contexto.

La numeración de secuencias que comienza en 0 es bastante común en la notación matemática, en particular en combinatoria , aunque los lenguajes de programación para matemáticas suelen indexar desde 1. [ 2 ] [ 3 ] [ 4 ] En informática , los índices de matrices suelen comenzar en 0 en los lenguajes de programación modernos, por lo que los programadores informáticos podrían usar cero en situaciones donde otros podrían usar primero , y así sucesivamente. En algunos contextos matemáticos, la numeración basada en cero se puede usar sin confusión, cuando las formas ordinales tienen un significado bien establecido con un candidato obvio para ir antes de primero ; por ejemplo, una derivada cero de una función es la función misma, obtenida al diferenciar cero veces. Tal uso corresponde a nombrar un elemento que no pertenece propiamente a la secuencia pero la precede: la derivada cero no es realmente una derivada en absoluto. Sin embargo, así como la primera derivada precede a la segunda derivada , también la derivada cero (o la función original misma) precede a la primera derivada . 

Programación informática

Origen

Martin Richards , creador del lenguaje BCPL (precursor de C ), diseñó arreglos que se inician en 0 como la posición natural para acceder al contenido del arreglo en el lenguaje, ya que el valor de un puntero p utilizado 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 indirección en tiempo de ejecución , por lo que la optimización de indirección proporcionada por estos arreglos se realizó en tiempo de compilación. [ 6 ] Sin embargo, la optimización fue importante. [ 6 ] [ 7 ]

En 1982, Edsger W. Dijkstra, en su pertinente nota «Por qué la numeración debería empezar en cero» [ 8 ], argumentó que los subíndices de los arreglos deberían empezar en cero, ya que es el número más natural . Al analizar posibles diseños de rangos de arreglos encerrándolos en una desigualdad encadenada, combinando desigualdades estrictas y estándar para obtener cuatro posibilidades, demostró que, en su opinión, los arreglos basados ​​en cero se representan mejor mediante rangos de índices que no se superponen, los cuales comienzan en cero, aludiendo a intervalos abiertos, semiabiertos y cerrados, como en el caso de 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 los "intervalos" cerrados ( ai ≤ ( a − 1)  ? ), y que con "intervalos" semiabiertos de números naturales, la longitud de una subsecuencia es igual al límite superior menos el límite inferior ( ai < b da ( ba ) valores posibles para i , con a , b , i todos enteros).

Uso en lenguajes de programación

Este uso se deriva de decisiones de diseño presentes en muchos lenguajes de programación influyentes , como C , Java y Lisp . En estos tres, los tipos de secuencia (arreglos en C, arreglos y listas en Java, y listas y vectores en Lisp) se indexan comenzando con el subíndice cero. Particularmente en C, donde los arreglos están estrechamente ligados a la aritmética de punteros , esto simplifica la implementación: el subíndice se refiere a un desplazamiento desde la posición inicial del arreglo, por lo que el primer elemento tiene un desplazamiento de cero.

La referencia a la memoria mediante una dirección y un desplazamiento se representa directamente en el hardware de prácticamente todas las arquitecturas informáticas, por lo que este detalle de diseño en C facilita la compilación, aunque a costa de ciertos factores humanos. En este contexto, usar "cero" como ordinal no es estrictamente correcto, pero es una práctica común en este ámbito. Algunos lenguajes de programación, como Fortran o COBOL , tienen subíndices de matriz que comienzan con uno, ya que fueron concebidos como lenguajes de programación de alto nivel y, como tales, debían tener una correspondencia con los números ordinales habituales , que son muy anteriores a la invención del cero . Y algunos lenguajes de programación, como Ada , ALGOL 60 y PL/I , permiten un límite inferior arbitrario para cada índice.

Pascal permite que el rango de una matriz sea de cualquier tipo ordinal (incluidos los tipos enumerados) y Ada permite cualquier subtipo discreto. APL permite establecer el origen del índice en 0 o 1 durante el tiempo de ejecución mediante programación. [ 9 ] [ 10 ] Algunos lenguajes más recientes, como Lua y Visual Basic , han adoptado la misma convención por la misma razón.

El cero es el valor entero sin signo más pequeño, uno de los tipos más fundamentales en programación y diseño de hardware. En informática, el cero se usa frecuentemente como caso base para muchos tipos de recursión numérica . Las demostraciones y otros razonamientos matemáticos en informática a menudo comienzan con cero. Por estas razones, en informática no es inusual numerar desde cero en lugar de desde uno.

Si se utiliza una matriz para representar un ciclo, es conveniente obtener el índice con una función módulo , que puede dar como resultado cero.

Propiedades numéricas

Con la numeración basada en cero, un rango se puede expresar como el intervalo semiabierto [ 0, n ) , en contraposición al intervalo cerrado [1, n ] . Los rangos vacíos, que suelen aparecer en los algoritmos, son difíciles de expresar con un intervalo cerrado sin recurrir a convenciones obtusas como [1, 0] . Debido a esta propiedad, la indexación basada en cero reduce potencialmente los errores de desfase de uno y los errores de delimitación . [ 8 ] Por otro lado, el recuento de repeticiones n se calcula de antemano, lo que hace que el uso del conteo de 0 a n − 1 (inclusive) sea menos intuitivo. Algunos autores prefieren la indexación basada en uno, ya que se corresponde más estrechamente con la forma en que se indexan las entidades en otros contextos. [ 11 ]

Otra característica de esta convención reside en el uso de la aritmética modular, tal como se implementa en las computadoras modernas. Generalmente, la función módulo asigna a cualquier entero módulo N uno de los números 0, 1, 2, ..., N − 1 , donde N ≥ 1. Gracias a esto, muchas fórmulas en algoritmos (como la que se usa para calcular los índices de una tabla hash) se pueden expresar elegantemente en código utilizando la operación módulo cuando los índices de los arreglos comienzan en cero.

Las operaciones con punteros también pueden expresarse de forma más elegante en un índice basado en cero debido a la lógica subyacente de dirección/desplazamiento mencionada anteriormente. Para ilustrarlo, supongamos que a es la dirección de memoria del primer elemento de un array e i es el índice del elemento deseado. Para calcular la dirección del elemento deseado, si los índices comienzan desde 1, la dirección deseada se calcula mediante esta expresión:

a+s×(i1),{\displaystyle a+s\times (i-1),}

donde s es el tamaño de cada elemento. En cambio, si los números de índice cuentan desde 0, la expresión se convierte en

a+s×i.{\displaystyle a+s\times i.}

Esta expresión más simple es más eficiente para calcular en tiempo de ejecución .

Sin embargo, un lenguaje que desee indexar arreglos desde 1 podría adoptar la convención de que cada dirección de arreglo se representa mediante a ′ = as ; es decir, en lugar de usar la dirección del primer elemento del arreglo, dicho lenguaje usaría la dirección de un elemento ficticio ubicado inmediatamente antes del primer elemento real. La expresión de indexación para un índice basado en 1 sería entonces:

a+s×i.{\displaystyle a'+s\times i.}

Por lo tanto, la ventaja de eficiencia en tiempo de ejecución que ofrece la indexación basada en cero no es inherente, sino un efecto de la decisión de representar un array con la dirección de su primer elemento en lugar de la dirección del ficticio elemento cero. Sin embargo, la dirección de ese elemento ficticio bien podría ser la de algún otro elemento en memoria no relacionado con el array.

Superficialmente, el elemento ficticio no se adapta bien a matrices multidimensionales. Indexar matrices multidimensionales desde cero hace que una conversión ingenua (contigua) a un espacio de direcciones lineal (variando sistemáticamente un índice tras otro) parezca más simple que cuando se indexa desde uno. Por ejemplo, al mapear la matriz tridimensional A[ P ][ N ][ M ] a una matriz lineal L[ M⋅N⋅P ] , ambas con M ⋅ N ⋅ P elementos, el índice r en la matriz lineal para acceder a un elemento específico con L[ r ] = A[ z ][ y ][ x ] en indexación basada en cero, es decir [0 ≤ x < P ] , [0 ≤ y < N ] , [0 ≤ z < M ] , y [0 ≤ r < M ⋅ N ⋅ P ] , se calcula mediante

r=zMETROnorte+yMETRO+incógnita.{\displaystyle r=z\cdot M\cdot N+y\cdot M+x.}

Al organizar todos los arreglos con índices basados ​​en 1 ( [1 ≤ x′P ] , [1 ≤ y′N ] , [1 ≤ z′M ] , [1 ≤ r′M ⋅ N ⋅ P ] ), y asumiendo una disposición análoga de los elementos, se obtiene

r=(z1)METROnorte+(y1)METRO+(incógnita0){\displaystyle r'=(z'-1)\cdot M\cdot N+(y'-1)\cdot M+(x'-0)}

para acceder al mismo elemento, lo que sin duda parece más complicado. Por supuesto, r ′ = r + 1, ya que [ z = z ′ – 1], [ y = y ′ – 1] y [ x = x ′ – 1]. Un ejemplo sencillo y cotidiano es la notación posicional , que la invención del cero hizo posible. En la notación posicional, las decenas, las centenas, los millares y todos los demás dígitos comienzan con cero; solo las unidades comienzan con uno. [ 12 ]

Esta situación puede generar cierta confusión terminológica. En un esquema de indexación basado en cero, el primer elemento es el "elemento número cero"; asimismo, el duodécimo elemento es el "elemento número once". Por lo tanto, surge una analogía entre los números ordinales y la cantidad de objetos numerados: el índice más alto de n objetos será n − 1 , y se refiere al n -ésimo elemento. Por esta razón, a veces se hace referencia al primer elemento como el elemento cero , para evitar confusiones.

Ciencia

En matemáticas , muchas secuencias de números o de polinomios se indexan mediante números enteros no negativos, por ejemplo, los números de Bernoulli y los números de Bell .

Tanto en mecánica como en estadística , se define el momento cero , que representa la masa total en el caso de la densidad física , o la probabilidad total, es decir, uno, para una distribución de probabilidad .

La ley cero de la termodinámica se formuló después de la primera, la segunda y la tercera ley, pero se considera más fundamental, de ahí su nombre.

En biología, se dice que un organismo tiene intencionalidad de orden cero si no muestra "ninguna intención de nada en absoluto". Esto incluiría una situación en la que el fenotipo genéticamente predeterminado del organismo resulta en una ventaja adaptativa para sí mismo, porque no "pretendía" expresar sus genes. [ 13 ] De manera similar, una computadora puede considerarse desde esta perspectiva una entidad intencional de orden cero, ya que no "pretende" expresar el código de los programas que ejecuta. [ 14 ]

En los experimentos biológicos o médicos, el primer día de un experimento a menudo se numera como día 0. [ 15 ]

El paciente cero (o caso índice ) es el paciente inicial en la muestra poblacional de una investigación epidemiológica .

Otros campos

Un uso común de la numeración basada en cero para personas de la mayoría de las culturas es la edad: un bebé tiene cero años durante el primer año de su vida y un año al cumplir un año. Por el contrario, muchos sistemas de cálculo de la edad en Asia Oriental se basan en uno, asignando a un recién nacido la edad de un año. [ 16 ]

En Los signos restantes de siglos pasados , [ 17 ] Al-Biruni numeró los años del ciclo metónico del 0 al 18.

El año cero no existe en el calendario gregoriano, de uso generalizado , ni en su predecesor, el calendario juliano . En esos sistemas, al año 1 a. C. le sigue el año 1 d. C. Sin embargo, sí existe un año cero en la numeración astronómica (donde coincide con el año juliano 1  a. C.) y en la norma ISO  8601:2004 (donde coincide con el año gregoriano 1  a. C.), así como en todos los calendarios budistas e hindúes .

En muchos países, la planta baja de los edificios se considera la planta número  0, en lugar de la "primera  planta", como se suele hacer en Estados Unidos. Esto crea una nomenclatura coherente, con las plantas subterráneas marcadas con números negativos.

Si bien el ordinal 0 se usa principalmente en comunidades directamente relacionadas con las matemáticas, la física y la informática, también hay ejemplos en la música clásica. El compositor Anton Bruckner consideró que su primera Sinfonía en Re menor no era digna de ser incluida en el canon de sus obras, y escribió gilt nicht ("no cuenta") en la partitura y un círculo con una barra transversal, con la intención de que significara "inválido". Pero póstumamente, esta obra llegó a ser conocida como Sinfonía No.  0 en Re menor , aunque en realidad fue escrita después de la Sinfonía No.  1 en Do menor . Hay una Sinfonía aún anterior en Fa menor de Bruckner, que a veces se llama No.  00. El compositor ruso Alfred Schnittke también escribió una Sinfonía No.  0 .

En algunas universidades, como Oxford y Cambridge, la "semana  0" o, en ocasiones, la "semana cero" se refiere a la semana anterior a la primera semana de clases del semestre. En Australia, algunas universidades la denominan "  semana O", un juego de palabras con " semana de orientación ". De forma similar, las semanas introductorias en la educación universitaria en Suecia se conocen generalmente como " nollning " (inicio de clases).

La Fuerza Aérea de los Estados Unidos inicia el entrenamiento básico cada miércoles, y la primera semana (de ocho) se considera que comienza el domingo siguiente. Los cuatro días previos a ese domingo suelen denominarse "semana cero".

Los relojes de 24 horas y la norma internacional ISO 8601 utilizan el 0 para indicar la primera (cero) hora del día, en consonancia con el uso del 0 para indicar el primer (cero) minuto de la hora y el primer (cero) segundo del minuto. Asimismo, los relojes de 12 horas utilizados en Japón utilizan el 0 para indicar la hora inmediatamente posterior a la medianoche y al mediodía, a diferencia del 12 utilizado en otros lugares, con el fin de evitar confusiones sobre si las 12  a. m. y las 12  p. m. representan el mediodía o la medianoche .

Los dibujos de Robert Crumb para el primer número de Zap Comix fueron robados, así que dibujó un número completamente nuevo, que se publicó como el número  1. Más tarde, volvió a entintar sus fotocopias de las ilustraciones robadas y las publicó como el número  0.

La circunvalación de Bruselas, en Bélgica, se denomina R0. Se construyó después de la circunvalación de Amberes , pero se consideró que Bruselas, al ser la capital, merecía una numeración más básica. De forma similar, la autopista de circunvalación (aún sin terminar) que rodea Budapest, en Hungría, se denomina M0 .

El cero se usa a veces en las direcciones postales , especialmente en sistemas donde los números pares corresponden a un lado de la calle y los impares al otro. Un ejemplo de ello es la iglesia Christ Church en Harvard Square , cuya dirección es 0  Garden Street.

Anteriormente, en la Fórmula 1 , cuando un campeón mundial vigente no competía en la siguiente temporada, el número  1 no se asignaba a ningún piloto, sino que un piloto del equipo campeón llevaba el número  0 y el otro, el número  2. Esto ocurrió tanto en 1993 como en 1994, con Damon Hill luciendo el número 0 en ambas temporadas, ya que el campeón defensor Nigel Mansell se retiró después de 1992 y el campeón defensor Alain Prost se retiró después de 1993. Sin embargo, en 2014, la categoría cambió a números personalizados para toda la carrera de los pilotos, en lugar de números asignados por el equipo, aunque el campeón defensor aún tenía la opción de llevar el número 1. Por lo tanto, el 0 ya no se utiliza en este caso. No está claro si está disponible como número elegido por el piloto, o si debe estar entre el 2 y el 99, pero hasta la fecha no se ha utilizado bajo este sistema.

En algunos deportes de equipo se permite elegir el 0 como número de uniforme de un jugador (además del rango habitual del 1 al 99). La NFL votó a favor de permitir esto a partir de 2023.

Una precuela cronológica de una serie puede numerarse como 0, como por ejemplo Ring 0: Birthday o Zork Zero .

Los Ferrocarriles Federales Suizos numeran ciertas clases de material rodante desde cero, por ejemplo, de  460 000 a 118.

En el ámbito de la ficción, Isaac Asimov acabó añadiendo una Ley Cero a sus Tres Leyes de la Robótica , convirtiéndolas esencialmente en cuatro leyes.

Una ruleta estándar incluye el número 0 y los números del 1 al 36. El 0 aparece en verde, por lo que no se considera ni rojo ni negro a efectos de apuestas. El juego de cartas Uno tiene cartas numeradas del 0 al 9, además de cartas especiales dentro de cada palo de color.

Las cuatro libertades esenciales del software libre están numeradas a partir del cero. Esto se debe a razones históricas: la lista original solo tenía tres libertades, y cuando se añadió la cuarta, se colocó en la posición cero por considerarse más fundamental.

Véase también

Referencias

Citas

  1. M. Seed, Graham (1965). Introducción a la programación orientada a objetos en C++ con aplicaciones en gráficos por computadora (2.ª  ed.). British Library: Springer. pág.  391. ISBN 1852334509. Consultado el 11 de febrero de 2020 .
  2. Steve Eddins y Loren Shure. "Indexación de matrices en MATLAB" . Consultado el 23 de febrero de 2021 .
  3. "Cómo : Obtener elementos de listas" . Wolfram . Consultado el 23 de febrero de 2021 . 
  4. "Indexación de arreglos, matrices y vectores" . Maplesoft . Consultado el 23 de febrero de 2021 .
  5. Martin Richards (1967). Manual de referencia de BCPL (PDF) . Instituto Tecnológico de Massachusetts. pág. 11. Archivado del original (PDF) el 20 de enero de 2013. Consultado el 28 de enero de 2014 . 
  6. 1 2 3 Mike Hoye. "Cita requerida" . Recuperado el 28 de enero de 2014 .
  7. Tom Van Vleck (1995). "El IBM 7094 y CTSS" . Consultado el 28 de enero de 2014 .
  8. 1 2 Dijkstra, Edsger Wybe (2 de mayo de 2008). "Por qué la numeración debería comenzar en cero (EWD 831)" . Archivo EW Dijkstra . Universidad de Texas en Austin . Recuperado el 16 de marzo de 2011 .
  9. Brown, Jim (diciembre de 1978). "En defensa del origen del índice 0". ACM SIGAPL APL Quote Quad . 9 (2): 7. doi : 10.1145/586050.586053 . S2CID 40187000 . 
  10. Hui, Roger. "¿Es el origen del índice 0 un obstáculo?" . jsoftware.com . JSoftware . Consultado el 19 de enero de 2015 .
  11. Programación con Microsoft® Visual C# 2005 por Donis Marshall.
  12. Sal Khan. Matemáticas de 1.er grado / Valor posicional / Cuadrícula numérica . Khan Academy . Consultado el 28 de julio de 2018. Título de YouTube: Cuadrícula numérica / Conteo / Matemáticas básicas / Khan Academy.
  13. Byrne, Richard W. "El simio pensante: orígenes evolutivos de la inteligencia" . Consultado el 18 de mayo de 2010 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  14. Dunbar, Robin. "La historia humana: una nueva historia de la evolución de la humanidad" . Archivado del original el 27 de agosto de 2010. Consultado el 18 de mayo de 2010 .
  15. Towle, Albert (1989). Biología moderna . Holt McDougal. pág. 35. ISBN  9780030139277.
  16. "Cómo se calcula la edad de manera diferente en todo el mundo" . Calculatorian . 7 de marzo de 2026. Consultado el 18 de mayo de 2026 .
  17. entre las páginas 154 y 155

Fuentes

  • Este artículo incorpora material tomado de zeroth en el Free On-line Dictionary of Computing antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" de la GFDL , versión 1.3 o posterior.