El logaritmo irlandés fue un sistema de manipulación de números inventado por Percy Ludgate para la multiplicación mecánica. El sistema utilizaba una combinación de levas mecánicas como tablas de búsqueda y suma mecánica para sumar índices pseudologarítmicos para producir productos parciales, que luego se sumaban para producir resultados. [1]
La técnica es similar a los logaritmos de Zech (también conocidos como logaritmos de Jacobi), pero utiliza un sistema de índices original de Ludgate. [2]
El algoritmo de Ludgate comprime la multiplicación de dos números decimales únicos en dos búsquedas de tablas (para convertir los dígitos en índices), la suma de los dos índices para crear un nuevo índice que se ingresa en una segunda tabla de búsqueda que genera el producto de salida. [3] Debido a que ambas tablas de búsqueda son unidimensionales y la suma de movimientos lineales es simple de implementar mecánicamente, esto permite un mecanismo menos complejo que el que se necesitaría para implementar una tabla de búsqueda de multiplicación bidimensional de 10 × 10.
Ludgate afirmó que eligió deliberadamente los valores de sus tablas para que fueran lo más pequeños posible; Teniendo esto en cuenta, las tablas de Ludgate se pueden construir simplemente a partir de los primeros principios, ya sea mediante métodos de lápiz y papel o mediante una búsqueda sistemática utilizando sólo unas pocas decenas de líneas de código de programa. [4] No corresponden ni a logaritmos de Zech, ni a índices de Remak ni a índices de Korn. [4]
La siguiente es una implementación del algoritmo del logaritmo irlandés de Ludgate en el lenguaje de programación Python :
tabla1 = [ 50 , 0 , 1 , 7 , 2 , 23 , 8 , 33 , 3 , 14 ]tabla2 = [ 1 , 2 , 4 , 8 , 16 , 32 , 64 , 3 , 6 , 12 , 24 , 48 , 0 , 0 , 9 , 18 , 36 , 72 , 0 , 0 , 0 , 27 , 54 , 5 , 10 , 20 , 40 , 0 , 81 , 0 , 15 , 30 , 0 , 7 , 14 , 28 , 56 , 45 , 0 , 0 , 21 , 42 , 0 , 0 , 0 , 0 , 25 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 35 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 49 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] def producto ( a : int , b : int ) -> int : """Algoritmo del logaritmo irlandés de Ludgate.""" return tabla2 [ tabla1 [ a ] + tabla1 [ b ]]
La tabla 1 está tomada del artículo original de Ludgate; Dada la primera tabla, el contenido de la Tabla 2 se puede derivar trivialmente de la Tabla 1 y la definición del algoritmo. Tenga en cuenta que, dado que el último tercio de la segunda tabla es completamente ceros, esto podría aprovecharse para simplificar aún más la implementación mecánica del algoritmo.
{{cite book}}
: Mantenimiento CS1: otros ( enlace )