10/11/2006
En el vasto universo de la programación, especialmente en campos como el análisis de datos, la ingeniería y la computación científica, las funciones matemáticas son herramientas indispensables. Una de las más fundamentales y poderosas es la que nos permite calcular logaritmos. En C++, la librería estándar nos provee de una forma sencilla y eficiente de hacerlo a través de la función log(), definida en la cabecera <cmath>. Este artículo es una inmersión profunda en todo lo que necesitas saber para dominar esta función y sus variantes.

¿Qué es Exactamente la Función log() en C++?
La función log() en C++ está diseñada para un propósito muy específico: calcular el logaritmo natural (también conocido como logaritmo neperiano) de un número. El logaritmo natural es aquel que tiene como base el número e, una constante matemática irracional cuyo valor aproximado es 2.71828. Matemáticamente, lo que la función calcula se representa como loge(x) o ln(x).
Para utilizarla, es imprescindible incluir la librería <cmath> al principio de tu código. Esta librería es el centro neurálgico de las operaciones matemáticas en C++, conteniendo un amplio repertorio de funciones que van desde trigonometría hasta potencias y, por supuesto, logaritmos.
Sintaxis y Sobrecarga de la Función
Una de las ventajas de C++ es la sobrecarga de funciones, que permite que una misma función opere con diferentes tipos de datos. La función log() se beneficia enormemente de esto, ofreciendo varias versiones para manejar distintos niveles de precisión. A partir del estándar C++11, los prototipos principales son:
// Prototipos de la función log() en <cmath> double log (double x); float log (float x); long double log (long double x); double log (T x); // Versión para tipos de datos enteros (T)Esto significa que puedes pasarle a la función un valor de tipo float, double, long double o incluso un entero como int o long. En el caso de los enteros, el valor será promovido implícitamente a double antes de realizar el cálculo, y el resultado será también un double.
Parámetros y Valores de Retorno: Entendiendo el Comportamiento
La función log() es sencilla en su uso, ya que solo acepta un único argumento obligatorio: el número del cual se quiere calcular el logaritmo. Sin embargo, el valor de este argumento es crucial para el resultado que obtendremos. El dominio matemático de la función logaritmo natural son los números reales positivos, y la implementación en C++ respeta esta regla.
Tabla de Comportamiento de log()
Para entender claramente cómo se comporta la función según el valor de entrada x, la siguiente tabla comparativa es de gran ayuda:
| Valor del Parámetro (x) | Valor de Retorno | Explicación |
|---|---|---|
| x > 1 | Positivo | El logaritmo de un número mayor que 1 es siempre positivo. |
| x = 1 | 0 | El logaritmo de 1 en cualquier base es siempre cero. |
| 0 < x < 1 | Negativo | Para valores entre 0 y 1, el logaritmo natural es negativo. |
| x = 0 | -∞ (Infinito negativo) | La función devuelve un valor que representa infinito negativo, usualmente -INF. |
| x < 0 | NaN (Not a Number) | El logaritmo de un número negativo no está definido en los números reales, por lo que la función devuelve un valor especial 'Not a Number'. |
Ejemplos Prácticos de la Función log()
La teoría es importante, pero la mejor forma de consolidar el conocimiento es viendo el código en acción. A continuación, se presentan algunos ejemplos comentados.

Ejemplo 1: Uso básico y manejo de valores fuera de dominio
Este ejemplo muestra cómo se calcula el logaritmo de un número positivo y qué sucede cuando intentamos usar un número negativo.
#include <iostream> #include <cmath> // No olvides incluir esta cabecera int main() { double x = 13.056, result; // Calculamos el logaritmo de un número positivo result = log(x); std::cout << "El logaritmo natural de " << x << " es: " << result << std::endl; // Intentamos calcular el logaritmo de un número negativo x = -3.591; result = log(x); std::cout << "El logaritmo natural de " << x << " es: " << result << std::endl; return 0; }Salida esperada:
El logaritmo natural de 13.056 es: 2.56925 El logaritmo natural de -3.591 es: nanComo se puede observar, el programa maneja correctamente ambas situaciones, devolviendo el resultado numérico para la entrada válida y `nan` para la entrada negativa, evitando que el programa se bloquee.
Más allá de la Base 'e': `log10()` y Logaritmos en Otras Bases
Si bien el logaritmo natural es el más común en muchas áreas de las matemáticas y la física, a menudo necesitamos trabajar con otras bases. La más frecuente es la base 10, utilizada en escalas como la de Richter para terremotos o el pH en química. Para ello, C++ nos ofrece la función `log10()`.
La Función `log10()`
Funciona de manera idéntica a log(), pero calcula el logaritmo en base 10. También está definida en <cmath> y cuenta con sobrecargas para float, double y long double.
#include <iostream> #include <cmath> int main() { double x = 9000.0; double result_ln = log(x); double result_log10 = log10(x); std::cout << "log( " << x << " ) = " << result_ln << std::endl; std::cout << "log10( " << x << " ) = " << result_log10 << std::endl; return 0; }Salida esperada:
log( 9000.00 ) = 9.104980 log10( 9000.00 ) = 3.954243¿Cómo Calcular Logaritmos en Cualquier Base?
¿Y si necesitas calcular el logaritmo en base 2, base 16 o cualquier otra base arbitraria? La librería <cmath> no proporciona una función directa para cada base posible, pero podemos lograrlo fácilmente aplicando una propiedad matemática fundamental de los logaritmos: el cambio de base.

La fórmula es: logb(a) = logc(a) / logc(b)
Podemos usar el logaritmo natural (base *e*) como nuestra base 'c'. Por lo tanto, para calcular el logaritmo en base `b` de un número `a`, simplemente calculamos log(a) / log(b). Podemos crear nuestra propia función para esto:
#include <iostream> #include <cmath> double log_base(double a, double base) { return log(a) / log(base); } int main() { double x = 65536; double base = 2; double result = log_base(x, base); std::cout << "El logaritmo en base " << base << " de " << x << " es: " << result << std::endl; return 0; }Salida esperada:
El logaritmo en base 2 de 65536 es: 16Preguntas Frecuentes (FAQ)
¿Qué librería debo incluir para usar `log()`?
Debes incluir la cabecera <cmath> en C++ o <math.h> si estás trabajando en un programa de C.
¿Cuál es la diferencia principal entre `log()` y `log10()`?
La función log() calcula el logaritmo natural (base e), mientras que log10() calcula el logaritmo común (base 10).
¿Qué ocurre si paso un cero a la función `log()`?
La función devolverá un valor que representa infinito negativo (-INF), ya que el logaritmo de cero tiende a menos infinito.
¿Existe una función para el logaritmo en base 2?
Sí, a partir del estándar C++11, la librería <cmath> también incluye la función log2(), que está optimizada específicamente para calcular el logaritmo en base 2, una operación muy común en informática.
Si quieres conocer otros artículos parecidos a Función log() en C++: Guía Definitiva puedes visitar la categoría Juegos.
