कंप्यूटर विज्ञान में प्रश्न को फ्रेम करने के लिए, अक्सर हम कई संभावनाओं के उत्पाद की गणना करना चाहते हैं:
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 निर्देश सेट के लिए विशिष्ट है, या यह प्रोसेसर आर्किटेक्चर के कुछ और मौलिक गुण है?