ฉันพยายามใช้ฟังก์ชันต่อไปนี้ในทศนิยมที่มีความแม่นยำสองเท่าและมีข้อผิดพลาดสัมพัทธ์ต่ำ:
สิ่งนี้ถูกใช้อย่างกว้างขวางในแอปพลิเคชันทางสถิติเพื่อเพิ่มความน่าจะเป็นหรือความหนาแน่นของความน่าจะเป็นที่แสดงในพื้นที่บันทึก แน่นอนว่าหรือสามารถโอเวอร์โฟลว์หรืออันเดอร์โฟล์วได้ง่ายซึ่งอาจจะไม่ดีเพราะพื้นที่บันทึกถูกใช้เพื่อหลีกเลี่ยงการมีอันเดอร์โฟล์ในตอนแรก นี่เป็นวิธีแก้ปัญหาทั่วไป:exp ( y )
ยกเลิกจากไม่เกิดขึ้น แต่จะลดลงโดย\ที่แย่กว่านั้นคือเมื่อและปิด นี่คือพล็อตข้อผิดพลาดแบบสัมพัทธ์:exp x l o g 1 p ( exp ( y - x ) )
พล็อตถูกตัดออกที่เพื่อเน้นรูปร่างของเส้นโค้งเกี่ยวกับการยกเลิกที่เกิดขึ้น ฉันเห็นข้อผิดพลาดมากถึงและสงสัยว่ามันแย่กว่าเดิมมาก (FWIW, ฟังก์ชั่น "ความจริงภาคพื้นดิน" ถูกนำมาใช้โดยลอยความแม่นยำโดยพลการของ MPFR ที่มีความแม่นยำ 128 บิต) l o g s u m ( x , y ) = 0 10 - 11
ฉันลองการปฏิรูปอื่น ๆ ทั้งหมดมีผลลัพธ์เหมือนกัน เมื่อเป็นนิพจน์ด้านนอกจะเกิดข้อผิดพลาดเดียวกันโดยการบันทึกสิ่งที่อยู่ใกล้กับ 1 ด้วยเป็นนิพจน์ด้านนอกการยกเลิกจะเกิดขึ้นในนิพจน์ด้านในl o g 1 p
ตอนนี้ข้อผิดพลาดแบบสัมบูรณ์มีน้อยมากดังนั้นมีข้อผิดพลาดสัมพัทธ์น้อยมาก (ภายใน epsilon) อาจมีคนแย้งว่าเนื่องจากผู้ใช้สนใจในความน่าจะเป็นจริง ๆ (ไม่ใช่ความน่าจะเป็นบันทึก) ข้อผิดพลาดสัมพัทธ์ร้ายแรงนี้ก็ไม่ใช่ปัญหา เป็นไปได้ว่ามันมักจะไม่ใช่ แต่ฉันเขียนฟังก์ชั่นห้องสมุดและฉันต้องการให้ลูกค้าสามารถนับความผิดพลาดสัมพัทธ์ได้ไม่เลวร้ายยิ่งกว่าการปัดเศษข้อผิดพลาดl o g s u m
ดูเหมือนว่าฉันต้องการแนวทางใหม่ มันจะเป็นอะไร?