Wikiwand AI

Numeración desde cero

sistema de conteo de números From Wikipedia, the free encyclopedia

La numeración desde cero es una forma de numeración en la que el elemento inicial de una secuencia se asigna al índice 0, en lugar del índice 1, como es típico en circunstancias cotidianas no matemáticas o no relacionadas con la programación. Bajo la numeración desde cero, el elemento inicial a veces se denomina el elemento «cero»,[1] en lugar del elemento «primero»; «cero» es una palabra acuñada 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 el elemento cero. No hay un acuerdo amplio sobre la corrección de usar 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 falta contexto.

La numeración de secuencias que comienzan 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 usualmente indexan desde 1.[2][3][4] En las ciencias de la computación, los índices de vectores usualmente comienzan en 0 en los lenguajes de programación modernos, por lo que los programadores podrían usar «cero» en situaciones donde otros usarían «primero», y así sucesivamente. En algunos contextos matemáticos, la numeración desde cero puede usarse sin confusión, cuando las formas ordinales tienen un significado bien establecido con un candidato obvio para preceder al «primero»; por ejemplo, una «derivada cero» de una función es la función misma, obtenida al diferenciar cero veces. Este 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 de computadoras

Origen

Martin Richards, creador del lenguaje BCPL (un precursor de C), diseñó vectores que inician en 0 como la posición natural para comenzar a acceder al contenido del vector 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 fue compilado por primera vez para la 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 vectores se realizaba en tiempo de compilación.[6] La optimización fue, no obstante, importante.[6][7]

En 1982, Edsger W. Dijkstra en su nota pertinente «Por qué la numeración debe comenzar en cero»[8] argumentó que los subíndices de vectores deben comenzar en cero, siendo este último el número más natural. Discutiendo posibles diseños de rangos de vectores al encerrarlos en una desigualdad encadenada, combinando desigualdades estrictas y estándares en cuatro posibilidades, demostrando que, según su convicción, los vectores desde cero se representan mejor con rangos de índices no superpuestos 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 (a ≤ i < a ?) que los «intervalos» cerrados (a ≤ i ≤ (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 (a ≤ i < b da (b − a) valores posibles para i, con a, b, i todos enteros).

Uso en lenguajes de programación

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

La referencia a la memoria por una dirección y un desplazamiento se representa directamente en el hardware de computadora en prácticamente todas las arquitecturas de computadoras, por lo que este detalle de diseño en C facilita la compilación, a costa de algunos factores humanos. En este contexto, usar «cero» como ordinal no es estrictamente correcto, pero es un hábito extendido en esta profesión. Algunos lenguajes de programación, como Fortran o COBOL, tienen subíndices de vectores que comienzan con uno, porque fueron diseñados como lenguajes de alto nivel, y como tales debían corresponder a los números ordinales usuales que preceden a la invención del cero por mucho tiempo. Algunos lenguajes de programación, como Ada, ALGOL 60, PL/I, permiten un límite inferior arbitrario para cada índice.

Pascal permite que el rango de un vector sea de cualquier tipo ordinal (incluidos 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 de manera programática.[9][10] Algunos lenguajes recientes, como Lua y Visual Basic, han adoptado la misma convención por la misma razón.

Cero es el valor entero sin signo más bajo, uno de los tipos más fundamentales en programación y diseño de hardware. En ciencias de la computación, el cero se usa a menudo como el caso base para muchos tipos de recursión numérica. Las pruebas y otros tipos de razonamiento matemático en ciencias de la computación a menudo comienzan con cero. Por estas razones, en ciencias de la computación no es inusual numerar desde cero en lugar de uno.

Si un vector se usa para representar un ciclo, es conveniente obtener el índice con una operación módulo, que puede resultar en cero.

Propiedades numéricas

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

Otra propiedad de esta convención es en el uso de la aritmética modular como se implementa en las computadoras modernas. Usualmente, la operación módulo mapea cualquier entero módulo N a uno de los números 0, 1, 2, ..., N − 1, donde N ≥ 1. Debido a esto, muchas fórmulas en algoritmos (como la que calcula índices de tablas hash) pueden expresarse elegantemente en código usando la operación módulo cuando los índices de vectores comienzan en cero.

Las operaciones con punteros también pueden expresarse más elegantemente en un índice desde cero debido a la lógica subyacente de dirección/desplazamiento mencionada anteriormente. Para ilustrar, supongamos que a es la dirección de memoria del primer elemento de un vector, e i es el índice del elemento deseado. Para calcular la dirección del elemento deseado, si los números de índice cuentan desde 1, la dirección deseada se calcula con esta expresión:

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

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

Sin embargo, un lenguaje que desee indexar vectores desde 1 podría adoptar la convención de que cada dirección de vector se representa por a′ = a – s; es decir, en lugar de usar la dirección del primer elemento del vector, 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 desde 1 sería entonces

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

Superficialmente, el elemento ficticio no escala bien a vectores multidimensionales. La indexación de vectores multidimensionales desde cero hace que una conversión (contigua) ingenua 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 el vector tridimensional A[P][N][M] a un vector lineal L[M⋅N⋅P], ambos con M ⋅ N ⋅ P elementos, el índice r en el vector lineal para acceder a un elemento específico con L[r] = A[z][y][x] en indexación desde cero, es decir, [0 ≤ x < P], [0 ≤ y < N], [0 ≤ z < M], y [0 ≤ r < M ⋅ N ⋅ P], se calcula por

Organizando todos los vectores con índices desde 1 ([1 ≤ x′ ≤ P], [1 ≤ y′ ≤ N], [1 ≤ z′ ≤ M], [1 ≤ r′ ≤ M ⋅ N ⋅ P]), y asumiendo un vector análogo de los elementos, da

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

  • Más información ⁠ ...
    Índices desde cero
    x
    y
    012..⁠⁠..89
    0 0001020809
    1 1011121819
    2 2021222829
    ..
    ⁠⁠ ⁠⁠
    ..
    8 8081828889
    9 9091929899
    El contenido de la tabla representa el índice r.
    Cerrar
  •  
  • Más información ⁠ ...
    Índices desde uno
    x'
    y'
    123..⁠⁠..910
    1 0102030910
    2 1112131920
    3 2122232930
    ..
    ⁠⁠ ⁠⁠
    ..
    9 8182838990
    10 91929399100
    El contenido de la tabla representa el índice r′.
    Cerrar

Esta situación puede llevar a cierta confusión en la terminología. En un esquema de indexación desde cero, el primer elemento es el «elemento número cero»; asimismo, el duodécimo elemento es el «elemento número once». Por lo tanto, aparece 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, el primer elemento a veces se denomina el elemento cero, en un intento de evitar la confusión.

Ciencia

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

En la mecánica y la 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.

El «principio cero de la termodinámica» fue formulada después de las leyes primera, segunda y tercera, 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 donde el fenotipo genéticamente predeterminado del organismo resulta en un beneficio de aptitud para sí mismo, porque no «intentó» expresar sus genes.[13] En un sentido similar, una computadora puede considerarse desde esta perspectiva una entidad de intencionalidad de orden cero, ya que no «intenta» expresar el código de los programas que ejecuta.[14]

En 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

El año cero no existe en el ampliamente usado calendario gregoriano ni en su predecesor, el calendario juliano. En esos sistemas, el año 1 a. C. es seguido por 1 d. C.. Sin embargo, hay un año cero en la numeración de años astronómica (donde coincide con el año juliano 1 a. C.) y en ISO 8601:2004 (donde coincide con el año gregoriano 1 a. C.), así como en todos los calendarios budistas y hindúes.

En muchos países, la planta baja en edificios se considera como el piso número 0 en lugar de la «primera planta», la convención de nomenclatura usualmente encontrada en los Estados Unidos de América. Esto crea un conjunto consistente con los pisos subterráneos marcados con números negativos.

Mientras que el ordinal de 0 encuentra uso principalmente en comunidades directamente conectadas con matemáticas, física y ciencias de la computación, también hay casos en la música clásica. El compositor Anton Bruckner consideró su temprana Sinfonía en re menor indigna de incluirse en el canon de sus obras, y escribió gilt nicht («no cuenta») en la partitura y un círculo con una barra, con la intención de significar «inválida». Pero póstumamente, esta obra pasó a conocerse como Sinfonía n.º 0 en re menor, aunque en realidad fue escrita después de la Sinfonía n.º 1 en do menor. Hay una Sinfonía en fa menor aún más temprana de Bruckner, que a veces se llama n.º 00. El compositor ruso Alfred Schnittke también escribió una Sinfonía n.º 0.

En algunas universidades, incluyendo Oxford y Cambridge, la «semana 0» o ocasionalmente «semana nula» se refiere a la semana antes de la primera semana de clases en un trimestre. En Australia, algunas universidades se refieren a esto como «semana O», que sirve como un juego de palabras con «semana de orientación». De manera paralela, las semanas introductorias en las educaciones universitarias en Suecia generalmente se llaman nollning (cero).

La Fuerza Aérea de los Estados Unidos comienza el entrenamiento básico cada miércoles, y la primera semana (de ocho) se considera que comienza con el domingo siguiente. Los cuatro días antes de ese domingo a menudo se denominan «semana cero».

Los relojes de 24 horas y el estándar internacional ISO 8601 usan 0 para denotar la primera (cero) hora del día, consistente con usar el 0 para denotar el primer (cero) minuto de la hora y el primer (cero) segundo del minuto. También, los relojes de 12 horas usados en Japón usan 0 para denotar la hora inmediatamente después de la medianoche y el mediodía en contraste con el 12 usado en otros lugares, para evitar confusión 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, por lo que dibujó un número completamente nuevo, que fue publicado como el número 1. Más tarde, volvió a entintar sus fotocopias del arte robado y lo publicó como el número 0.

La carretera de circunvalación de Bruselas en Bélgica está numerada como R0. Fue construida después de la carretera de circunvalación alrededor de Amberes, pero Bruselas (siendo la ciudad capital) se consideró merecedora de un número más básico. De manera similar, la autopista orbital (inacabada) alrededor de Budapest en Hungría se llama M0.

Cero se usa a veces en direcciones de calles, especialmente en esquemas donde los números pares están en un lado de la calle y los impares en el otro. Un caso destacado es la Iglesia de Cristo en Harvard Square, cuya dirección es 0 Garden Street.

Anteriormente en Fórmula 1, cuando un campeón mundial defensor no competía en la temporada siguiente, el número 1 no se asignaba a ningún piloto, pero un piloto del equipo campeón mundial llevaba el número 0, y el otro, el número 2. Esto ocurrió tanto en 1993 como en 1994 con Damon Hill llevando 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 serie pasó a que los pilotos llevaran números personalizados de por vida, en lugar de números asignados por el equipo, excepto que el campeón defensor aún tiene la opción de llevar el número 1. Por lo tanto, el 0 ya no se usa en este escenario. No está claro si está disponible como un número elegido por un piloto, o si deben estar entre 2 y 99, pero no se ha usado hasta la fecha bajo este sistema.

Algunos deportes de equipo permiten que el 0 sea elegido como el número de uniforme de un jugador (además del rango típico de 1-99). La NFL votó para permitir esto a partir de 2023.

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

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

En el ámbito de la ficción, Isaac Asimov eventualmente añadió una Ley Cero a sus tres leyes de la robótica, convirtiéndolas esencialmente en cuatro leyes.

Una rueda de ruleta estándar contiene el número 0 además de 1-36. Aparece en verde, por lo que no se clasifica como un número «rojo» ni «negro» para propósitos de apuestas. El juego de cartas Uno tiene cartas numéricas que van de 0 a 9 junto con cartas especiales, dentro de cada palo de color.

Las cuatro libertades esenciales del software libre están numeradas comenzando desde cero. Esto es por razones históricas: la lista originalmente tenía solo tres libertades, y cuando se añadió la cuarta, se colocó en la posición cero porque se consideraba más básica.

Véase también

Referencias

Related Articles

Timelines

Top Qs

Fact Checks