Para enquadrar a questão, na ciência da computação, muitas vezes queremos calcular o produto de várias probabilidades:
P(A,B,C) = P(A) * P(B) * P(C)
A abordagem mais simples é simplesmente multiplicar esses números, e era isso que eu ia fazer. No entanto, meu chefe disse que é melhor adicionar o log de probabilidades:
log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))
Isso fornece a probabilidade do log, mas podemos obter a probabilidade posteriormente, se necessário:
P(A,B,C) = e^log(P(A,B,C))
A adição de log é considerada melhor por dois motivos:
- Impede o "underflow", pelo qual o produto das probabilidades é tão pequeno que é arredondado para zero. Isso geralmente pode ser um risco, pois as probabilidades são muitas vezes muito pequenas.
- É mais rápido porque muitas arquiteturas de computadores podem realizar acréscimos mais rapidamente que multiplicação.
Minha pergunta é sobre o segundo ponto. É assim que eu o descrevi, mas não leva em conta o custo adicional de obter o log! Deveríamos comparar "custo de log + custo de adição" com "custo de multiplicação". Ainda é menor depois de levar isso em conta?
Além disso, a página da Wikipedia ( probabilidade de log ) é confusa a esse respeito, afirmando "A conversão para o formulário de log é cara, mas é incorrida apenas uma vez". Eu não entendo isso, porque acho que você precisaria tomar o log de todos os termos independentemente antes de adicioná-lo. o que estou perdendo?
Finalmente, a justificativa de que "os computadores executam adição mais rápido que a multiplicação" é meio vaga. Isso é específico para o conjunto de instruções x86 ou é uma característica mais fundamental das arquiteturas de processador?