Aby sformułować pytanie, w informatyce często chcemy obliczyć iloczyn kilku prawdopodobieństw:
P(A,B,C) = P(A) * P(B) * P(C)
Najprostszym podejściem jest po prostu pomnożenie tych liczb i właśnie to zamierzałem zrobić. Jednak mój szef powiedział, że lepiej jest dodać dziennik prawdopodobieństwa:
log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))
Daje to prawdopodobieństwo dziennika, ale w razie potrzeby możemy je później uzyskać:
P(A,B,C) = e^log(P(A,B,C))
Dodawanie dziennika jest uważane za lepsze z dwóch powodów:
- Zapobiega „niedomiarowi”, przez co iloczyn prawdopodobieństwa jest tak mały, że zostaje zaokrąglony do zera. Może to często stanowić ryzyko, ponieważ prawdopodobieństwo jest często bardzo małe.
- Jest to szybsze, ponieważ wiele architektur komputerowych może wykonywać dodawanie szybciej niż mnożenie.
Moje pytanie dotyczy drugiej kwestii. Tak to widziałem, ale nie bierze ono pod uwagę dodatkowych kosztów uzyskania dziennika! Powinniśmy porównać „koszt dziennika + koszt dodania” do „kosztu pomnożenia”. Czy po uwzględnieniu tego jest jeszcze mniejszy?
Strona Wikipedii ( prawdopodobieństwo dziennika ) jest pod tym względem myląca, mówiąc: „Konwersja do postaci dziennika jest kosztowna, ale następuje tylko raz”. Nie rozumiem tego, ponieważ myślę, że musisz dodać dziennik każdego terminu niezależnie przed dodaniem. czego mi brakuje?
Wreszcie uzasadnienie, że „komputery wykonują dodawanie szybciej niż mnożenie” jest niejasne. Czy jest to specyficzne dla zestawu instrukcji x86, czy może jest to bardziej fundamentalna cecha architektury procesorów?