Para enmarcar la pregunta, en informática a menudo queremos calcular el producto de varias probabilidades:
P(A,B,C) = P(A) * P(B) * P(C)
El enfoque más simple es simplemente multiplicar estos números, y eso es lo que iba a hacer. Sin embargo, mi jefe dijo que es mejor agregar el registro de las probabilidades:
log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))
Esto da la probabilidad de registro, pero podemos obtener la probabilidad después si es necesario:
P(A,B,C) = e^log(P(A,B,C))
La adición de registros se considera mejor por dos razones:
- Evita el "desbordamiento" por el cual el producto de las probabilidades es tan pequeño que se redondea a cero. Esto a menudo puede ser un riesgo ya que las probabilidades son a menudo muy pequeñas.
- Es más rápido porque muchas arquitecturas de computadora pueden realizar la suma más rápidamente que la multiplicación.
Mi pregunta es sobre el segundo punto. Así es como lo he visto descrito, ¡pero no tiene en cuenta el costo adicional de obtener el registro! Deberíamos comparar "costo de registro + costo de adición" con "costo de multiplicación". ¿Sigue siendo más pequeño después de tener eso en cuenta?
Además, la página de Wikipedia ( probabilidad de registro ) es confusa a este respecto, afirmando que "la conversión al formulario de registro es costosa, pero solo se incurre una vez". No entiendo esto, porque creo que necesitaría tomar el registro de cada término de forma independiente antes de agregar. ¿Qué me estoy perdiendo?
Finalmente, la justificación de que "las computadoras realizan la suma más rápido que la multiplicación" es algo vaga. ¿Es eso específico del conjunto de instrucciones x86, o es un rasgo más fundamental de las arquitecturas de procesador?