Per inquadrare la domanda, nell'informatica spesso vogliamo calcolare il prodotto di diverse probabilità:
P(A,B,C) = P(A) * P(B) * P(C)
L'approccio più semplice è semplicemente quello di moltiplicare questi numeri, ed è quello che stavo per fare. Tuttavia, il mio capo ha detto che è meglio aggiungere il registro delle probabilità:
log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))
Questo dà la probabilità del registro, ma possiamo ottenere la probabilità in seguito, se necessario:
P(A,B,C) = e^log(P(A,B,C))
L'aggiunta del registro è considerata migliore per due motivi:
- Impedisce "underflow" per cui il prodotto delle probabilità è così piccolo che viene arrotondato a zero. Questo può essere spesso un rischio poiché le probabilità sono spesso molto piccole.
- È più veloce perché molte architetture di computer possono eseguire l'aggiunta più rapidamente della moltiplicazione.
La mia domanda riguarda il secondo punto. Questo è come l'ho visto descritto, ma non tiene conto del costo aggiuntivo di ottenere il registro! Dovremmo confrontare il "costo del registro + costo dell'aggiunta" con il "costo della moltiplicazione". È ancora più piccolo dopo averlo preso in considerazione?
Inoltre, la pagina di Wikipedia ( Probabilità di registro ) è confusa in questo senso, affermando che "La conversione in forma di registro è costosa, ma è sostenuta solo una volta". Non capisco questo, perché penso che dovresti prendere il registro di ogni termine in modo indipendente prima di aggiungere. Cosa mi sto perdendo?
Infine, la giustificazione secondo cui "i computer eseguono l'aggiunta più velocemente della moltiplicazione" è piuttosto vaga. È specifico del set di istruzioni x86 o è un tratto più fondamentale delle architetture di processori?