X

Algoritmo vs Logaritmo: ¿qué diferencias tienen?

Existe mucha confusión sobre que es un Algoritmo y que es un Logaritmo en computación y su relación entre si, cuando en realidad no tienen mucho en común, de forma habitual la TV y la prensa usan el termino Logaritmo en lugar de Algoritmo, incluso hay muchas web sobre programación que comenten el mismo error de forma inexplicable, en este articulo esperamos clarificar un poco que es uno y que es otro.

¿Que es un Logaritmo?

Básicamente un Logaritmo es una operación matemática inversa a elevar un numero a la encima potencia, por ejemplo si elevamos 2^4 nos da 16, la operación inversa, osea la operación logarítmica seria Log2(16)=4 , partiendo del resultado de la potenciacion (16) y la base (2) podemos obtener el numero exponente (4).

¿Que es un Algoritmo?

El termino Algoritmo fue acuñado por Muhammad ibn Musa al-Khwarizmi a principios el siglo IX y según la definición brindada en el libro “Estructura de Datos y Algoritmos” de R. Hernandez, J.C. Lazaro R. Dormido y S. Ros es bien simple: “Un algoritmo es un método o proceso seguido para resolver un problema” ademas agrega ciertos requisitos que un algoritmo debe cumplir:

• El algoritmo debe ser correcto y debe solucionar el problema.
• Debe contemplar todos los casos posibles, incluso contemplar los errores.
• Debe estar formado por una serie de pasos, cada uno en un orden claro y preciso.
• El numero de pasos debe ser finito y con un final.

Aunque estas definiciones se ajustan a la definición general de Algoritmo y ha sus aplicaciones en Matematicas, una definición un poco mas moderna y aplicada a la computación podría seria ser:

“Un algoritmo es una secuencia acotada de pasos y reglas previamente establecidos mediante los cual se procesan datos de entrada para producir una salida deseada”

Los algoritmos no son exclusivos del ámbito de la programación y los usamos todos los días en la vida diaria ya que hasta fuimos educados usando algoritmos, por ejemplo cuando realizamos operaciones matemáticas tan básicas como suma, resta, división o multiplicación.

En todos los casos cuando hacemos una operación con papel y lápiz estamos aplicando un algoritmo, es decir una serie de pasos y reglas sobre los números con el fin de obtener el resultado de dicha operación.

Logaritmos y Algoritmos

La gran pregunta ¿que tienen en común Logaritmos y Algoritmos? No mucho, salvo que el calculo de una operación logarítmica se puede hacer mediante un algoritmo que resuelva dicha operación, tal como lo hace cualquier otra operación matemática simple o compleja, aunque jamas pueden ser usados como sinónimos o como términos intercambiables, porque nada tiene que ver uno con el otro.

Un algoritmo puede realizar infinitas operaciones diferentes, de ordenación, de calculo, de procesado, de modelado y una largo etc, sin embargo el logaritmo siempre va a resolver el mismo problema, invertir la potenciacion partiendo del resultado de esta, para obtener el valor de exponencia del que se partió originalmente.

¿En computación no se usan Logaritmos?

En realidad si, cualquier software de diseño gráfico, calculo matemático y/o cientifico, programas de modelado y renderizado 3D, etc usan de forma extendida cálculos logarítmicos para diferentes fines.

Donde los cálculos logarítmicos tienen un lugar destacado es en los procesadores (CPU) ya que incluyen funciones aritméticas básicas (suma,resta,division y multiplicacion) y conjuntos de funciones exponenciales, trigonométricas y logarítmicas adicional también incorporar contantes matemáticas entre ellas contantes logarítmicas.

Si bien en una epoca no se podían cargar constantes en los registros del núcleo de los coprocesadores matemáticos que servían de complemento a los procesadores 286 y 386, ya que dichas constantes debían estar ubicados en memoria para ser usados, de forma posterior se incorporaron instrucciones en el núcleo para cargar ciertas constantes entre ellas algunas logarítmicas dado su frecuente uso, esto hace que sea mas rápido y eficiente cargarlas desde allí que desde la memoria.

A nivel de hardware y ejecución de cálculos matemáticos por parte del CPU, los cálculos logarítmicos son usados principalmente para paliar el problema de exactitud de las operación matemáticas con decimales, para eso primero vamos a ver cual es el problema con ellos.

En calculo aritmético lógico en el CPU aparecen 2 tipos de números: los enteros y los reales, y ambos son tratados de forma diferente por a CPU, cuando se trabaja con enteros se hace de forma eficiente debido a que le resulta mas fácil trabajar con ellos debido a la aritmética de precisión múltiple, sin embargo con los números reales la realidad cambia un poco porque aparece el problema de los decimales infinitos.

Este problema es bien conocido en al computación y la ciencia en general y radica que un numero real en la mayoría de los casos no puede representarse de forma exacta debido al largo del numero, un procesador solo puede manejar un numero finito de decimales ya que esta limitado por el hardware, mientras que un numero real puede tener infinitos números después de la coma, entonces a la hora de representarlo siempre va a ser un numero aproximado, nunca el exacto, la precisión infinita es imposible.

Vamos a ver un ejemplo simple, por ejemplo si hacemos:

10 / 3 = 3,3333333333333333333333333333333333333… e infinitos 3

Si a ese resultado lo multiplicamos por 3 nos va a dar 9,99999999… e infinitos 9

Es cierto que en las calculadoras nos va a mostar 10, aunque eso es porque porque reconoce el problema y hace trampa para que parezca que da exacto cuando en realidad el resultado matemático real es otro.

Este margen de error parece muy pequeño para un humano sin embargo en matemáticas, física, computación y en cualquier ciencia hay un abismo de distancia entre un resultado y otro, entre ambos hay infinitos números reales de por medio y todas estas áreas se basan en precisión y la exactitud de los cálculos, el mas minúsculo error produce incertidumbre y puede inducir un error de proporciones, sobre todo operación tras operación esas diferencias se van acumulando.

Por ejemplo en la operación tormenta del desierto pasaba algo similar, los sistemas Patriot estadounideses erraban el objetivo, el sistema básicamente detectaba el avión o los misiles enemigos, según la distancia y velocidad calculaba donde iba a estar el objetivo  en el momento en que el misil Patriot interceptara al objetivo, hacia los calculos y disparaba, el problema era que el reloj del sistema tenia un problema de redondeo de 0,000000095 segundos por operacion, prácticamente nada.

Sin embargo ese error se iba acumulando y tras 100 horas de operación del sistema, la diferencia llegaba a 0.34 segundos, diferencia suficiente para los misiles Patriot erraran el objetivo por 600 metros, debido a este error de calculo, soldados estadounidenses murieron debido a que los misiles enemigos lograron traspasar la defensa anti-aérea.

¿Que pasaría si hubieran estos errores de calculo al volar un avión de pasajeros o en la operación de una central de energía nuclear? Un desastre seguro.

¿Donde entran los cálculos Logarítmos en esto?

Para reducir el margen de error al que puede inducir esta falta de precisión se utiliza la coma flotante mediante notación científica, que esta representada por 3 partes: signo, mantisa (o coeficiente) y base/exponente, esto permite reducir y simplificar  los números permitiendo manejar números muy pero muy largos obteniendo una precisión aceptable.

En sistema de 32 bits la coma flotante va desde el rango de 1.2×10^-38 hasta 3.4×10^38 y en sistemas de 64 bits va desde 5.0×10^-324 hasta 1.8×10^308 y es para operar con este formato son necesarios por parte del CPU los calculos lograritmicos realizar cálculos logaritmos y para ellos se necesitan las instrucciones constantes y funciones logarítmicas incluidas en los núcleos del CPU.

Esperamos que hayamos podido despejar las dudas entre uno y otro.

 

Artículos relacionados