ในการวางกรอบคำถามในวิทยาการคอมพิวเตอร์บ่อยครั้งที่เราต้องการคำนวณผลคูณของความน่าจะเป็น:
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))
การเพิ่มบันทึกถือว่าดีกว่าด้วยเหตุผลสองประการ:
- มันป้องกัน "underflow" โดยผลิตภัณฑ์ของความน่าจะเป็นมีขนาดเล็กจนมันถูกปัดเศษเป็นศูนย์ สิ่งนี้มักเป็นความเสี่ยงเนื่องจากความน่าจะเป็นมีขนาดเล็กมาก
- มันเร็วกว่าเพราะสถาปัตยกรรมคอมพิวเตอร์จำนวนมากสามารถทำการเพิ่มได้เร็วกว่าการคูณ
คำถามของฉันเกี่ยวกับประเด็นที่สอง นี่คือวิธีที่ฉันได้เห็นมันอธิบาย แต่ไม่คำนึงถึงค่าใช้จ่ายเพิ่มเติมในการรับบันทึก! เราควรจะเปรียบเทียบ "ต้นทุนของล็อก + ค่าใช้จ่ายของการเพิ่ม" กับ "ต้นทุนของการคูณ" มันยังมีขนาดเล็กลงหลังจากที่คำนึงถึงเรื่องนี้หรือไม่?
นอกจากนี้หน้า Wikipedia ( ความน่าจะเป็นบันทึก ) นั้นสร้างความสับสนในแง่นี้โดยระบุว่า "การแปลงเป็นไฟล์บันทึกมีราคาแพง แต่เกิดขึ้นเพียงครั้งเดียวเท่านั้น" ฉันไม่เข้าใจสิ่งนี้เพราะฉันคิดว่าคุณจะต้องใช้บันทึกของทุกคำศัพท์อย่างอิสระก่อนที่จะเพิ่ม ฉันพลาดอะไรไป
ในที่สุดเหตุผลที่ว่า "คอมพิวเตอร์ทำการเพิ่มเร็วกว่าการคูณ" นั้นค่อนข้างคลุมเครือ นั่นเป็นคำเฉพาะสำหรับชุดคำสั่ง x86 หรือเป็นคุณลักษณะพื้นฐานเพิ่มเติมของสถาปัตยกรรมโปรเซสเซอร์