มีวิธีที่ปรับปรุงใหม่ในการคำนวณ


11

ห้องสมุดคณิตศาสตร์ส่วนใหญ่มีฟังก์ชันลอการิทึมหลายรุ่น เวลาส่วนใหญ่เราถือว่าพวกเขาสมบูรณ์แบบ แต่จริงๆแล้วพวกเขาค่อนข้างมากแค่เสนอตัวเลขที่แน่นอน

สำหรับบางฟังก์ชั่นจะมีตัวแปรที่มีความเสถียรมากกว่า ยกตัวอย่างเช่น Fortran, R, Java และ C ทั้งสองมีMath.log1pสำหรับคอมพิวเตอร์log(1.0+x)(ซึ่งข้อเสนอที่มีความแม่นยำที่สูงขึ้นสำหรับค่าเล็ก ๆ ของ x) expm1และคู่ ที่นี่ปัญหาตัวเลขเกิดขึ้นจากการสูญเสียความแม่นยำ - หากxมีขนาดเล็กจริง ๆ1.0 + xสูญเสียตัวเลขเพื่อรักษา 1 ที่จุดเริ่มต้น

ฉันได้เห็นฟังก์ชั่นดังกล่าวเพื่อเพิ่มความแม่นยำในหลายสถานการณ์ สิ่งนี้ดูเหมือนจะค่อนข้างบ่อยเมื่อใดก็ตามที่คุณใช้งานฟังก์ชั่นการกระจาย (Gamma, Beta, Poisson ฯลฯ ) ด้วยความแม่นยำตัวเลขสูง logGammaยกตัวอย่างเช่นฟังก์ชันแกมมาดูเหมือนว่าจะใช้เวลาส่วนใหญ่ใช้เป็น โดยทั่วไปการไปที่ "logspace" สามารถปรับปรุงความแม่นยำได้อย่างมากดังนั้น R น่าจะมีสถานะ "logspace" ในฟังก์ชั่นส่วนใหญ่

อีกตัวอย่างหนึ่งใน R มีอยู่log1mexpสำหรับlog(1 - exp(p)): http://cran.r-project.org/web/packages/Rmpfr/vignettes/log1mexp-note.pdf

ฉันเล่นกับมาตรการเอนโทรปีและข้อมูลทางทฤษฎี ศัพท์ที่พบบ่อยมากมี

p * -log(p)

โดยปกติแล้วหนึ่งต้องการให้ฐานของลอการิทึมเป็น 2 ไม่ใช่ e; แต่บ่อยครั้งที่นี่เป็นเพียงปัจจัยเชิงเส้นและคุณสามารถใช้ลอการิทึมธรรมชาติ (เช่นนี้ไม่สำคัญกับฉัน) อย่างไรก็ตามคุณรู้หรือไม่ว่ามีวิธีการคำนวณคำศัพท์ที่เร็วขึ้น / มากขึ้น / แม่นยำมากขึ้น? ฉันมีมันอยู่ทั่วทุกสถานที่ดังนั้นมันจึงคุ้มค่าจริง ๆ ที่จะทำให้มันแม่นยำและรวดเร็วขึ้นเล็กน้อย (ช่วยฉันในสิ่งที่ "การเพิ่มประสิทธิภาพก่อนวัยอันควร" ตามปกติขอบคุณ)

ฉันไม่เห็นเหตุผลที่ชัดเจนใด ๆ ซึ่งอาจทำให้สูญเสียความแม่นยำ ดังนั้นฉันจึงสนใจเป็นส่วนใหญ่หากมีเคล็ดลับที่ดีเพื่อเร่งการคำนวณนี้ นั่นอาจช่วยให้ฉันรักษาp=0เคสมุม (ซึ่งก็คือ0แม้ว่าจะlog(0)ไม่มีอยู่จริง) หรือให้พื้นฐานฟรีแก่ฉัน (แม้ว่าการคูณครั้งเดียวกับค่าคงที่จะไม่แพงนักก็ตาม) ขอบคุณ


1
m10308pM10308|logp|700plogpp=0

R มาพร้อมกับlog2ฟังก์ชั่นซึ่งขึ้นอยู่กับระบบปฏิบัติการของคุณสามารถใช้กระดาษห่อหุ้มรอบ ๆlog/log(2)หรือใช้ประโยชน์จากความจริงที่ว่า C99 เพิ่มlog2ฟังก์ชั่น
ไม่ระบุชื่อ

คำตอบ:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.