Qual a diferença entre as funções matemáticas \log (x) e \log 10(x) presentes na biblioteca math.h? Utilizando essas funções, como seria possível calcular \log _{8}(52), isto é, logaritmo de 52 na base 8, na linguagem de programação C?

Passo 1

Você perguntou duas coisas: (1) qual a diferença entre as funções \log(x) e \log10(x) da biblioteca math.h; (2) como calcular \log_{8}(52) em C usando essas funções. As informações que temos do enunciado são exatamente essas funções e o valor cujo log queremos calcular: o número \,52 na base \,8. Nada mais foi pedido.

Passo 2

O que significa cada função (explicação didática, passo a passo):
  • A função \log(x) em math.h retorna o logaritmo natural de x, isto é, o logaritmo de base e, onde e\approx 2{,}718281828. Em notação matemática isso é \ln(x). Domínio: \,x>0.
  • A função \log10(x) em math.h retorna o logaritmo de base 10 de x. Em notação matemática isso é \log_{10}(x). Domínio: \,x>0.
  • Em C as assinaturas são, por exemplo, double log(double x); e double log10(double x); (há também logf/log10f para float).
Explicando de forma bem simples: uma calcula logaritmo na base e (natural) e a outra na base 10. Ambas recebem e retornam double e exigem argumento positivo.

Passo 3

Fórmula que nos permite passar de qualquer base para outra (a famosa mudança de base):
  • Se \,b>0, b\neq 1, e \,a>0, então
\log_{b} a = \frac{\ln a}{\ln b}.
Derivação curta e intuitiva: seja y=\log_b a. Então b^y=a. Aplicando logaritmo natural aos dois lados dá \ln(b^y)=\ln a e, pela propriedade \ln(b^y)=y\ln b, temos y=\dfrac{\ln a}{\ln b}. Pronto — essa é a fórmula que vamos usar. Como alternativa também vale
\log_{b} a = \frac{\log_{10} a}{\log_{10} b},
ou seja, podemos usar qualquer base consistente no numerador e denominador (natural ou base 10), porque elas diferem apenas por um fator constante que se cancela na divisão.

Passo 4

Aplicando a fórmula ao caso pedido, \log_{8}(52):
  • Usando log natural:
\log_{8}(52)=\frac{\ln 52}{\ln 8}.
  • Usando log base 10:
\log_{8}(52)=\frac{\log_{10} 52}{\log_{10} 8}.
Ambas as expressões dão o mesmo número. Observação prática: em C você pode usar tanto log() quanto log10() — o importante é usar a mesma base no numerador e no denominador.

Passo 5

Cálculo numérico (mostrando as etapas numéricas para você entender):
  • Valores aproximados (podem ser obtidos com calculadora ou pelo próprio programa C):
\ln 52 \approx 3{,}9512437185814273,
\ln 8 \approx 2{,}0794415416798359.
  • Dividindo:
\log_{8}(52)=\frac{3{,}9512437185814273}{2{,}0794415416798359}\approx 1{,}900146560\ldots
Portanto o resultado é cerca de \,1{,}900146560.

Passo 6

Como escrever isso em C (exemplo completo e prático). Observação: ao compilar, em sistemas Unix normalmente use -lm para linkar a math library, por exemplo: gcc meu.c -lm.
#include <stdio.h>
#include <math.h>

int main(void) {
    double a = 52.0;
    double b = 8.0;

    /* usando log natural (log = ln em math.h) */
    double r1 = log(a) / log(b);

    /* usando log base 10 */
    double r2 = log10(a) / log10(b);

    printf("log_8(52) usando log (ln):     %.9f\n", r1);
    printf("log_8(52) usando log10 (base10): %.9f\n", r2);

    return 0;
}
Saída esperada (aproximadamente):
log_8(52) usando log (ln):     1.900146560
log_8(52) usando log10 (base10): 1.900146560

Passo 7

Resumo rápido e dica de prova: quando precisar de logaritmo em base não diretamente disponível em uma biblioteca, use a mudança de base. É simples, rápido e seguro. Use log() (ln) por convenção quando for dividir dois logs (por exemplo, \log_b a = \dfrac{\log(a)}{\log(b)}).

Resposta

\log(x) em math.h é o logaritmo natural ( \ln x, base e); \log10(x) é o logaritmo na base 10 ( \log_{10}x).
\log_{8}(52) pode ser calculado em C como log(52.0)/log(8.0) (ou log10(52.0)/log10(8.0)), que vale aproximadamente \,1{,}900146560.

Exercícios relacionados