Qual a diferença entre as funções matemáticas
e
presentes na biblioteca math.h? Utilizando essas funções, como seria possível calcular
, 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
e
da biblioteca 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
na base
. Nada mais foi pedido.
math.h; (2) como calcular
Passo 2
O que significa cada função (explicação didática, passo a passo):
- A função
em math.hretorna o logaritmo natural de, isto é, o logaritmo de base , onde . Em notação matemática isso é . Domínio: . - A função
em math.hretorna o logaritmo de basede . Em notação matemática isso é . Domínio: . - Em C as assinaturas são, por exemplo,
double log(double x);edouble log10(double x);(há tambémlogf/log10fparafloat).
Explicando de forma bem simples: uma calcula logaritmo na base
(natural) e a outra na base
. 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
, , e , então
Derivação curta e intuitiva: seja
. Então
. Aplicando logaritmo natural aos dois lados dá
e, pela propriedade
, temos
. Pronto — essa é a fórmula que vamos usar. Como alternativa também vale
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,
:
- Usando log natural:
- Usando log base 10:
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):
- Dividindo:
Portanto o resultado é cerca de
.
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,
Resposta
math.h é o logaritmo natural (
log(52.0)/log(8.0) (ou log10(52.0)/log10(8.0)), que vale aproximadamente