stringtranslate.com

Nota G

Nota G, publicada originalmente en Sketch of The Analytical Engine Invented by Charles Babbage

Note G [a] es un algoritmo informático escrito por Ada Lovelace que fue diseñado para calcular números de Bernoulli utilizando el motor analítico hipotético . Generalmente se acepta que G es el primer algoritmo específico para una computadora, [1] [2] [3] [4] y, como resultado, se considera a Lovelace como el primer programador de computadoras . [5] [6] [7] [8] El algoritmo fue la última nota de una serie etiquetada de A a G, que empleó como ayuda visual para acompañar su traducción al inglés de la transcripción francesa de 1842 de Luigi Menabrea de la conferencia de Charles Babbage sobre la analítica. motor en la Universidad de Turín , "Notions sur la machine analytique de Charles Babbage" ("Elementos de la máquina analítica de Charles Babbage"). [7] [9] El Note G de Lovelace nunca fue probado, ya que el motor nunca fue construido. Sus notas, junto con su traducción, se publicaron en 1843. [6] [7]

En la era moderna , gracias a la mayor disponibilidad de equipos informáticos y recursos de programación, el algoritmo de Lovelace ha sido probado desde entonces, después de haber sido "traducido" a lenguajes de programación modernos. Estas pruebas han concluido de forma independiente que había un error en el script, debido a un error tipográfico menor, que dejaba inutilizable el algoritmo en su estado original. [10] [11]

Origen

Ada Lovelace
Ada Lovelace

En 1840, Charles Babbage fue invitado a dar un seminario en Turín sobre su máquina analítica, [12] la única explicación pública que dio sobre la máquina. [13] Durante la conferencia de Babbage, el matemático Luigi Menabrea escribió un relato del motor en francés. [12] Un amigo de Babbage, Charles Wheatstone , sugirió que para contribuir, Lovelace debería traducir el relato de Menabrea. [12] [14] Babbage sugirió que aumentara el relato con apéndices, que compiló al final de su traducción como una serie de siete "notas" denominadas AG. Su traducción se publicó en agosto de 1843, [12] en Taylor's Scientific Memoirs , [14] [15] donde el nombre de Lovelace estaba firmado "AAL". [12] [b] En estas notas, Lovelace describió las capacidades del motor analítico de Babbage si fuera utilizado para computación, presentando un plan más ambicioso para el motor que el que incluso el propio Babbage tenía. [3] [15] [16]

Las notas de Lovelace para el artículo eran tres veces más largas que el artículo en sí. [17] En las primeras notas, explora más allá de las ambiciones numéricas que Babbage tenía para la máquina, y sugiere que la máquina podría aprovechar la computación para abordar los ámbitos de la música, los gráficos, [18] y el lenguaje. [8] [19] [20]

Una vez más, podría actuar sobre otras cosas además del número, si se encontraran objetos cuyas relaciones fundamentales mutuas pudieran expresarse mediante las de la ciencia abstracta de las operaciones, y que también deberían ser susceptibles de adaptaciones a la acción de la notación operativa y el mecanismo del motor. . Suponiendo, por ejemplo, que las relaciones fundamentales de los sonidos agudos en la ciencia de la armonía y de la composición musical fueran susceptibles de tal expresión y adaptación, la máquina podría componer piezas musicales elaboradas y científicas de cualquier grado de complejidad o extensión.

—  Ada Lovelace, Notas sobre las memorias "Sketch of The Analytical Engine Invented by Charles Babbage" de la traductora Ada Augusta, condesa de Lovelace, Nota A

Ella explica a los lectores cómo el motor analítico estaba separado del motor diferencial anterior de Babbage , [21] y compara su función con la máquina Jacquard , [22] en el sentido de que usaba tarjetas perforadas binarias para denotar el lenguaje de máquina . En la nota C, este punto se ve reforzado por el hecho de que la máquina puede realizar acciones simultáneas e iteradas , asegurando que cualquier tarjeta o colección de tarjetas pueda usarse varias veces en la solución de un solo problema, [20] anticipando esencialmente las modernas métodos de control de flujo y bucles. [17] [23] Estas ideas llegaron a un punto crítico en la nota final, G, donde Lovelace intentó demostrar un ejemplo de computación .

La nota G solo hizo uso de las cuatro operaciones aritméticas : suma, resta, multiplicación y división, la implementación de la visión de Babbage:

Ante la imposibilidad de explicar aquí el proceso mediante el cual se alcanza este fin, debemos limitarnos a admitir que las cuatro primeras operaciones de la aritmética, es decir, suma, resta, multiplicación y división, pueden realizarse de manera directa mediante la intervención. de la máquina. Una vez admitido esto, la máquina es capaz de realizar todo tipo de cálculos numéricos, ya que todos esos cálculos finalmente se resuelven en las cuatro operaciones que acabamos de nombrar.

—  Charles Babbage, "Bosquejo de la máquina analítica inventada por Charles Babbage"

También utiliza la idea de Babbage de almacenar información en columnas de discos, cada una indicada por (para la variable ) y un número de subíndice que indica a qué columna se hace referencia.

Función

Lovelace usó una ecuación recursiva para calcular los números de Bernoulli, [12] en la que usó los valores anteriores en una ecuación para generar la siguiente. su método era el siguiente: [24]

donde es un coeficiente binomial ,

.

Los números de Bernoulli se pueden calcular de muchas maneras , pero Lovelace eligió deliberadamente un método elaborado para demostrar la potencia del motor. En la Nota G, afirma: "Terminaremos estas Notas siguiendo en detalle los pasos mediante los cuales la máquina podría calcular los Números de Bernoulli, siendo este (en la forma en que lo deduciremos) un ejemplo bastante complicado de su potestades." [20] El algoritmo particular utilizado por Lovelace en la Nota G genera el octavo número de Bernoulli (etiquetado como , ya que ella comenzó con .) [24]

Notación

La tabla del algoritmo organiza cada comando en orden. Cada comando denota una operación que se realiza en dos términos. La segunda columna indica sólo el operador que se está utilizando. Las variables se anotan como " ", [c] donde el superíndice anterior representa la cantidad de valores diferentes a los que se ha asignado la variable y el subíndice posterior representa la asignación ordinal de la variable, es decir, qué variable es. (Por ejemplo, se refiere a la segunda asignación de la variable número 4. Cualquier variable hasta ahora no definida tiene un superíndice de 0). Las variables están numeradas comenzando desde . La tercera columna le dice a la computadora exactamente qué comando se está ejecutando (por ejemplo, en la línea 1, el comando realizado es " "; la primera iteración de la variable 2 se multiplica por la primera iteración de la variable 3) y solo incorpora una operación. entre dos términos por línea. Columna 4: "Variables que reciben resultados" toma nota de dónde se debe almacenar el resultado de la operación en la columna 3. De esta manera, el número de superíndice de cualquier variable en esta columna se incrementa en uno cada vez. (por ejemplo, en la línea 1, el resultado de se asigna a las variables , y ).

La columna 5 indica si alguna de las variables utilizadas en la operación del comando ha sido modificada. Entre llaves, dos filas por comando colocan la variable original en el lado izquierdo de un signo igual y la nueva variable en el otro lado; es decir, si la variable ha sido modificada, su superíndice se incrementa en uno, y si no, sigue igual. (por ejemplo, la línea tres asigna el resultado de a la segunda iteración de la variable , y la quinta columna refleja esto al observar;

Ha cambiado, pero no.

En la columna 6, “Estado de Resultados”, el resultado asignado a la variable en la columna 4 se muestra en su valor exacto con base en los valores de los dos términos previamente asignados. (por ejemplo, en la línea 1 - se configuró al principio como y se configuró como la variable . Por lo tanto , en notación matemática ). Aparentemente, el motor no calcula esta columna y parece ayudar más a la claridad y la capacidad del lector para seguir los pasos del programa. (Por ejemplo, la línea 5 tiene una fracción dividida por dos, que se anota como si se multiplicara por la mitad, probablemente por coherencia y complejidad tipográfica de una fracción anidada). También utiliza notación de variables separadas fuera del programa. , las variables y , que se multiplican sucesivamente para encontrar el valor final, así: [10]

Más allá de esto, cada columna sucesiva muestra los valores de una variable determinada a lo largo del tiempo. Cada vez que una variable cambia o su valor se vuelve relevante debido a su presencia como uno de los términos en el comando actual, su valor se indica o se reformula en su columna respectiva. De lo contrario, se marca con puntos suspensivos para indicar su irrelevancia. Presumiblemente, esto imita la necesidad de la computadora de solo información relevante, rastreando así el valor de una variable a medida que el programa analiza . [10]

Método

El programa buscaba calcular lo que se conoce por convención moderna como el octavo número de Bernoulli, listado como , cuando Lovelace comienza a contar desde . [24]

Error

En la operación 4, la división que supuestamente se realiza es " ", que se almacenará en la variable . Sin embargo, la "Declaración de resultados" dice que la división debería ser:

De hecho, la división es al revés; es la segunda iteración de , como se puede ver en la operación 2. Asimismo, es la segunda iteración de , como se puede ver en la operación 3. Así, la operación 4 no debería ser , sino más bien . Este error significa que si el motor alguna vez ejecutara este algoritmo en este estado, no generaría números de Bernoulli correctamente y encontraría que su valor objetivo final ( el octavo número de Bernoulli ) sería .

Implementaciones modernas

El programa de Lovelace se puede implementar en un lenguaje de programación moderno , aunque debido al error mencionado anteriormente, si se transcribe exactamente devolvería un valor final incorrecto para . El programa original generalizado en pseudocódigo es el siguiente:

V[1] = 1V[2] = 2V[3] = n (n = 4 en el programa de Lovelace).V[4] = V[4] - V[1]V[5] = V[5] + V[1]V[11] = V[5] / V[4]V[11] = V[11] / V[2]V[13] = V[13] - V[11]V[10] = V[3] - V[1]V[7] = V[2] + V[7]V[11] = V[6] / V[7]V[12] = V[21] * V[11]V[13] = V[12] + V[13]V[10] = V[10] - V[1]V[6] = V[6] - V[1]V[7]= V[1] + V[7]//Terminar más tarde

La implementación en pseudocódigo destaca el hecho de que los lenguajes informáticos definen variables en una pila , lo que evita la necesidad de rastrear y especificar la iteración actual de una variable. Además, el programa de Lovelace sólo permitía definir variables realizando sumas , restas , multiplicaciones o divisiones en dos términos que eran variables previamente definidas. La sintaxis moderna sería capaz de realizar cada cálculo de forma más concisa. Esta restricción se hace evidente en algunos lugares, por ejemplo en el comando 6 ( ). Aquí Lovelace define una variable hasta ahora indefinida ( ) por sí misma, asumiendo así que todas las variables indefinidas son automáticamente iguales a 0, donde la mayoría de los lenguajes de programación modernos devolverían un error o listarían la variable como nula . Lo que pretendía era " ", pero se había limitado a utilizar únicamente variables como términos. Asimismo, en el comando 8 ( ), la notación estricta de la aritmética de dos términos se vuelve engorrosa, ya que para definir como 2, Lovelace se asigna su valor (0) a sí mismo más (2). Es debido a esta notación restrictiva que se define así.

Notas

  1. ^ Titulado completo "Diagrama para el cálculo mediante el motor de los números de Bernoulli", pero se conoce sinécdocalmente como "Nota G"
  2. ^ En las memorias, sus iniciales estaban mal impresas como "TODOS" [14]
  3. ^ Estas variables técnicamente se refieren a columnas de discos, por sugerencia de Babbage de que así es como deberían anotarse. [20]

Referencias

  1. ^ Demming, Anna. "Ada Lovelace". Científico nuevo . Consultado el 1 de junio de 2022 .
  2. ^ Krysa, Joasia. Ada Lovelace - Nunca hubo una nota G.
  3. ^ ab "Ada Lovelace, la primera visionaria de la tecnología". El neoyorquino . 2013-10-15 . Consultado el 2 de junio de 2022 .
  4. ^ Hercios 2009, pag. 59.
  5. ^ "Celebrando a Ada Lovelace: la 'primera programadora del mundo' - Short Sharp Science - New Scientist". 2009-03-27. Archivado desde el original el 27 de marzo de 2009 . Consultado el 1 de junio de 2022 .
  6. ^ ab "Ada Lovelace | Babbage Engine | Museo de Historia de la Computación". www.computerhistory.org . Consultado el 1 de junio de 2022 .
  7. ^ abc "Ada Lovelace | Biografía, computadora y hechos". Enciclopedia Británica . Consultado el 1 de junio de 2022 .
  8. ^ ab "Ada Lovelace: la primera programadora informática". Hilo mental . 2015-10-13 . Consultado el 2 de junio de 2022 .
  9. ^ Stein 1984, pag. 44.
  10. ^ abc "¿Qué hizo realmente el programa de Ada Lovelace?". twobithistory.org . Consultado el 1 de junio de 2022 .
  11. ^ "Ada Lovelace y la historia de Note G". Laboratorio de medios de Nueva York . Consultado el 1 de junio de 2022 .
  12. ^ abcdef "Cómo las notas de Ada Lovelace sobre el motor analítico crearon el primer programa de computadora". Revista BBC Science Focus . Consultado el 1 de junio de 2022 .
  13. ^ "Charles Babbage dejó un programa de ordenador en Turín en 1840. Aquí está". Cableado . ISSN  1059-1028 . Consultado el 1 de junio de 2022 .
  14. ^ abc "Tesoro matemático: notas de Ada Lovelace sobre el motor analítico | Asociación Matemática de América". www.maa.org . Consultado el 2 de junio de 2022 .
  15. ^ ab Lovelace & Babbage y la creación de las 'Notas' de 1843
  16. ^ Stein 1984, pag. 46.
  17. ^ ab "Ada Lovelace". Biografía . 2 de abril de 2014 . Consultado el 2 de junio de 2022 .
  18. ^ Toole, Betty Alexandra (23 de septiembre de 2004). "Byron, (Augusta) Ada [nombre de casada (Augusta) Ada King, condesa de Lovelace] (1815-1852), matemática y pionera en informática" . Diccionario Oxford de biografía nacional . vol. 1 (edición en línea). Prensa de la Universidad de Oxford. doi :10.1093/ref:odnb/37253. ISBN 978-0-19-861412-8. (Se requiere suscripción o membresía en la biblioteca pública del Reino Unido).
  19. ^ "Ada Lovelace - biografía, hechos e imágenes" . Consultado el 2 de junio de 2022 .
  20. ^ abcd "Bosquejo del motor analítico". www.fourmilab.ch . Consultado el 2 de junio de 2022 .
  21. ^ Woolley 1999.
  22. ^ "Celebrando a Ada Lovelace". Prensa del MIT. 2016-10-11 . Consultado el 2 de junio de 2022 .
  23. ^ "Ada Lovelace". Historia . 2021-02-26 . Consultado el 2 de junio de 2022 .
  24. ^ abc "Nota G de Ada Lovelace | Proyecto Lovelace". proyectolovelace.net . Consultado el 1 de junio de 2022 .

Fuentes