stringtranslate.com

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 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 de primer elemento; cero es un número ordinal acuñado que corresponde 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 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 posteriores de la secuencia cuando carece de 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 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 zeroth en situaciones en las que otros podrían usar first , 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 venir antes de first ; 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 sino que la precede: la derivada cero no es realmente una derivada en absoluto. Sin embargo, al igual que 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 .

Programación de computadoras

Origen

Martin Richards , creador del lenguaje BCPL (un precursor de C ), diseñó matrices que inician en 0 como la posición natural para comenzar a acceder al contenido de la matriz 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 estas matrices se realizó en tiempo de compilación. [6] Sin embargo, la optimización fue importante. [6] [7]

En 1982, Edsger W. Dijkstra, en su nota pertinente Por qué la numeración debería empezar en cero [8], argumentó que los subíndices de las matrices deberían empezar en cero, ya que este último es el número más natural . Discutió los posibles diseños de rangos de matrices encerrándolos en una desigualdad encadenada, combinando desigualdades agudas y estándar en cuatro posibilidades, demostrando que, según su convicción, las matrices basadas en cero se representan mejor mediante 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 ( ai < a  ?) que los "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 ( ba ) valores posibles para i , con a , b , i todos enteros).

Uso en lenguajes de programación

Este uso se deriva de las opciones de diseño incorporadas en muchos lenguajes de programación influyentes , incluidos C , Java y Lisp . En estos tres, los tipos de secuencia (matrices de C, matrices y listas de Java y listas y vectores de Lisp) se indexan comenzando con el subíndice cero. Particularmente en C, donde las matrices están estrechamente vinculadas 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.

La referencia a la memoria mediante una dirección y un desplazamiento se representa directamente en el hardware de la computadora en prácticamente todas las arquitecturas de computadora, 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 generalizado en esta profesión. Otros lenguajes de programación, como Fortran o COBOL , tienen subíndices de matriz que comienzan con uno, porque fueron concebidos como lenguajes de programación de alto nivel y, como tales, tenían que tener una correspondencia con los números ordinales habituales que son mucho anteriores a la invención del cero .

Pascal permite que el rango de una matriz sea de cualquier tipo ordinal (incluidos los tipos enumerados). APL permite establecer el origen del índice en 0 o 1 durante el tiempo de ejecución mediante programación. [9] [10] Algunos lenguajes 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 bajo, uno de los tipos más fundamentales en programación y diseño de hardware. En informática, el cero se utiliza a menudo como caso base para muchos tipos de recursión numérica . Las demostraciones y otros tipos de razonamiento matemático en informática suelen empezar con cero. Por estos motivos, en informática no es raro numerar a partir de cero en lugar de uno.

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

Propiedades numéricas

Con la numeración basada en cero, un rango se puede expresar como el intervalo semiabierto , [0, n ) , en oposición al intervalo cerrado, [1, n ] . Los rangos vacíos, que a menudo ocurren en 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 error de uno en uno y de postes de cerca . [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 propiedad de esta convención está en el uso de la aritmética modular tal como se implementa en las computadoras modernas. Por lo general, la función módulo asigna 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 se usa para calcular índices de tablas hash) se pueden expresar elegantemente en código utilizando la operación módulo cuando los índices de matriz comienzan en cero.

Las operaciones con punteros también se pueden expresar 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 una matriz e i es el índice del elemento deseado. Para calcular la dirección del elemento deseado, si los números del índice cuentan desde 1, la dirección deseada se calcula mediante esta expresión:

donde s es el tamaño de cada elemento. Por el contrario, 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 matrices a partir de 1 podría adoptar la convención de que cada dirección de matriz se representa mediante a ′ = as ; es decir, en lugar de utilizar la dirección del primer elemento de la matriz, dicho lenguaje utilizarí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

Por lo tanto, el beneficio de eficiencia en tiempo de ejecución de la indexación basada en cero no es inherente, sino un artefacto de la decisión de representar una matriz con la dirección de su primer elemento en lugar de la dirección del elemento cero ficticio. 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 la matriz.

Superficialmente, el elemento ficticio no escala 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

Organizando todas las matrices 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

para acceder al mismo elemento, lo que podría decirse que 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 se hizo posible gracias a la invención del cero. En la notación posicional, las decenas, centenas, millares y todos los demás dígitos comienzan con cero, solo las unidades comienzan con uno. [12]

Esta situación puede llevar a cierta confusión en la terminología. En un esquema de indexación basado en cero, el primer elemento es el "elemento número cero"; de la misma manera, el duodécimo elemento es el "elemento número once". Por lo tanto, aparece una analogía de los números ordinales con la cantidad de objetos numerados; el índice más alto de n objetos será n − 1 , y se refiere al n º elemento. Por esta razón, el primer elemento a veces se denomina el elemento cero , en un intento de evitar confusiones.

Ciencia

En matemáticas , muchas secuencias de números o de polinomios están indexadas por 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, segunda y tercera leyes, pero se consideró 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 hacer nada en absoluto". Esto incluiría una situación en la que el fenotipo predeterminado genéticamente del organismo da como resultado un beneficio de aptitud para sí mismo, porque no "tuvo la intención" de expresar sus genes. [13] En el mismo sentido, una computadora puede considerarse desde esta perspectiva una entidad intencional de orden cero, ya que no "tiene la intención" de expresar el código de los programas que ejecuta. [14]

En experimentos biológicos o médicos, el primer día de un experimento suele numerarse como el 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 utilizado calendario gregoriano ni en su predecesor, el calendario juliano . En esos sistemas, al año 1 a. C. le sigue el 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 el piso número 0 en lugar de "primer piso", la convención de nomenclatura que se utiliza habitualmente en los Estados Unidos de América. Esto crea un conjunto coherente con los pisos subterráneos marcados con números negativos.

Aunque el ordinal 0 se utiliza principalmente en comunidades directamente relacionadas con las matemáticas, la física y la informática, también hay casos en la música clásica. El compositor Anton Bruckner consideró que su temprana 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 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 incluso anterior 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, 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 de un semestre. En Australia, algunas universidades la denominan "semana O", que es un juego de palabras con " semana de orientación ". En paralelo, las semanas introductorias en las enseñanzas universitarias en Suecia se denominan generalmente nollning (puesta a cero).

La Fuerza Aérea de los Estados Unidos comienza el entrenamiento básico cada miércoles, y se considera que la primera semana (de ocho) comienza el domingo siguiente. Los cuatro días anteriores 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 hora (cero) del día, en consonancia con el uso del 0 para indicar el primer minuto (cero) de la hora y el primer segundo (cero) del minuto. Además, los relojes de 12 horas utilizados en Japón utilizan el 0 para indicar la hora inmediatamente posterior a la medianoche y el mediodía, en contraste con el 12 utilizado en otros lugares, para 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, por lo que dibujó un número completamente nuevo, que se publicó como número 1. Más tarde, volvió a entintar sus fotocopias de la obra de arte robada y las publicó como número 0.

La circunvalación de Bruselas en Bélgica se numera con el número R0. Se construyó después de la circunvalación de Amberes , pero Bruselas (al ser la capital) se consideró merecedora de un número más básico. De manera similar, la autopista de circunvalación (inconclusa) alrededor de Budapest en Hungría se denomina M0 .

El cero se utiliza a veces en las direcciones de las calles , especialmente en los esquemas en los que los números pares están en un lado de la calle y los impares en el otro. Un ejemplo de ello es Christ Church en Harvard Square , cuya dirección es 0 Garden Street.

Anteriormente en la 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, sino que un piloto del equipo campeón del mundo llevaría el número 0 y el otro, el número 2. Esto sucedió 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 renunció después de 1992 y el campeón defensor Alain Prost renunció después de 1993. Sin embargo, en 2014 la serie pasó a que los pilotos llevaran números personalizados de toda su carrera, en lugar de números asignados por el equipo, además de que el campeón defensor todavía tenía 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 número elegido por el piloto, o si deben estar entre 2 y 99, pero hasta la fecha no se ha utilizado bajo este sistema.

Algunos deportes de equipo permiten elegir el 0 como número de uniforme de un jugador (además del rango habitual de 1 a 99). La NFL votó para permitir esto a partir de 2023.

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

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

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

Una ruleta estándar contiene el número 0 y también del 1 al 36. Aparece en verde, por lo que no se clasifica como un número "rojo" ni "negro" a efectos de apuestas. El juego de cartas Uno tiene cartas con números del 0 al 9 junto con 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 originalmente tenía solo tres libertades y cuando se agregó la cuarta, se colocó en la posición cero por considerarse más básica.

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 informáticos (2.ª ed.). British Library: Springer. pág. 391. ISBN 1852334509. Recuperado el 11 de febrero de 2020 .
  2. ^ Steve Eddins y Loren Shure. «Indexación matricial 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 matrices, 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.
  6. ^ abc Mike Hoye. «Se necesita cita» . Consultado el 28 de enero de 2014 .
  7. ^ Tom Van Vleck (1995). "El IBM 7094 y el CTSS" . Consultado el 28 de enero de 2014 .
  8. ^ ab Dijkstra, Edsger Wybe (2 de mayo de 2008). "Por qué la numeración debería empezar en cero (EWD 831)". Archivo EW Dijkstra . Universidad de Texas en Austin . Consultado 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 Microsoft® Visual C# 2005 por Donis Marshall.
  12. ^ Sal Khan. Matemáticas de primer 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 tempranas / Khan Academy.
  13. ^ Byrne, Richard W. "El simio pensante: orígenes evolutivos de la inteligencia" . Consultado el 18 de mayo de 2010 .
  14. ^ Dunbar, Robin. "La historia humana: una nueva historia de la evolución de la humanidad" . Consultado el 18 de mayo de 2010 .
  15. ^ Towle, Albert (1989). Biología moderna . Holt McDougal. pág. 35. ISBN. 9780030139277.

Fuentes