Щоб вирішити питання, в галузі інформатики часто ми хочемо обчислити добуток кількох ймовірностей:
P(A,B,C) = P(A) * P(B) * P(C)
Найпростіший підхід - просто помножити ці числа, і саме це я збирався зробити. Однак мій начальник сказав, що краще додати журнал ймовірностей:
log(P(A,B,C)) = log(P(A)) + log(P(B)) + log(P(C))
Це дає ймовірність журналу, але ми можемо отримати ймовірність згодом:
P(A,B,C) = e^log(P(A,B,C))
Додавання журналу вважається кращим з двох причин:
- Це перешкоджає "переливу", завдяки чому добуток ймовірностей настільки малий, що він округляється до нуля. Це часто може бути ризиком, оскільки ймовірності часто дуже малі.
- Це швидше, тому що багато архітектури комп'ютера можуть виконувати додавання швидше, ніж множення.
Моє запитання щодо другого пункту. Ось як я це бачив, як це описано, але він не враховує додаткових витрат на отримання журналу! Ми повинні порівнювати "вартість журналу + вартість додавання" до "вартість множення". Чи все-таки вона менша після врахування цього?
Також у цьому відношенні сторінка Вікіпедії ( ймовірність журналу ) є заплутаною, заявляючи, що "Перехід у форму журналу є дорогим, але відбувається лише один раз". Я цього не розумію, тому що я думаю, що вам потрібно буде взяти журнал кожного терміна самостійно перед додаванням. Що я пропускаю?
Нарешті, обґрунтування того, що "комп’ютери виконують додавання швидше, ніж множення", є дещо невиразним. Це специфічно для набору інструкцій x86 чи це якась більш фундаментальна риса архітектури процесорів?