अधिकांश गणित पुस्तकालयों में लघुगणक कार्यों के कई संस्करण हैं। ज्यादातर समय हम उन्हें सही मानते हैं, लेकिन वास्तव में उनमें से बहुत कुछ निश्चित संख्या में सटीक सटीकता प्रदान करते हैं।
कुछ कार्यों के लिए, संख्यात्मक रूप से अधिक स्थिर संस्करण हैं। उदाहरण के लिए, फोरट्रान, आर, जावा और सी दोनों में Math.log1p
कंप्यूटिंग के लिए log(1.0+x)
(जो x के छोटे मूल्यों के लिए उच्च परिशुद्धता प्रदान करता है), और समकक्ष expm1
। यहां संख्यात्मक समस्याएं सटीक में नुकसान से उत्पन्न होती हैं - यदि x
वास्तव में छोटा है, 1.0 + x
तो शुरुआत में 1 को संरक्षित करने के लिए अंक खो देता है।
मैंने कई स्थितियों में सटीक सटीकता के लिए ऐसे कार्य देखे हैं। जब भी आप वितरण कार्यों (गामा, बीटा, पॉइसन आदि) को लागू कर रहे हैं तो यह काफी सामान्य प्रतीत होता है। उदाहरण के लिए गामा फ़ंक्शन का उपयोग अधिकांश समय के लिए किया जाता है logGamma
। सामान्य तौर पर, "लॉगस्पेस" में जाने से परिशुद्धता में बहुत सुधार हो सकता है, और इसलिए आर को लगता है कि अधिकांश कार्यों में "लॉगस्पेस" ध्वज है।
एक और उदाहरण, R में, इसके लिए मौजूद log1mexp
है log(1 - exp(p))
:
http://cran.r-project.org/web/packages/Rmpfr/vignettes/log1mexp-note.pdf
मैं एन्ट्रापी और सूचना के सिद्धांत के साथ खेल रहा हूँ। एक बहुत ही सामान्य शब्द है
p * -log(p)
जहां आम तौर पर, कोई चाहेगा कि लघुगणक का आधार 2 हो, ई नहीं; लेकिन जैसा कि अक्सर यह केवल एक रैखिक कारक है, और आप प्राकृतिक लॉगरिदम का उपयोग कर सकते हैं (इसलिए यह मेरे लिए महत्वपूर्ण नहीं है)। वैसे भी, क्या आप जानते हैं कि क्या इस शब्द की गणना करने का तेज़ / अधिक प्रत्यक्ष / अधिक सटीक तरीका है? मैं यह सब जगह कर रहा हूँ, इसलिए यह वास्तव में इसे थोड़ा और अधिक सटीक और तेज़ बनाने के लिए भुगतान कर सकता है (मुझे सामान्य "समय से पहले अनुकूलन" सामान, धन्यवाद बचाएं)।
मुझे कोई स्पष्ट कारण नहीं दिख रहा है जिससे सटीक नुकसान हो। इसलिए मुझे ज्यादातर दिलचस्पी है अगर इस गणना को तेज करने के लिए कोई अच्छी चाल है। शायद यह मुझे p=0
कोने के मामले का इलाज करने से भी बचाता है (जो कि समझदारी से है 0
, हालांकि log(0)
मौजूद नहीं है) या मुझे मुफ्त में बेस 2 देता है (हालांकि एक स्पष्ट रूप से एक एकल गुणन स्पष्ट रूप से हत्यारा महंगा नहीं है)। धन्यवाद।
log2
फ़ंक्शन के साथ आता है जो आपके OS के आधार पर एक साधारण आवरण हो सकता है log/log(2)
या इस तथ्य का उपयोग कर सकता है कि C99 ने एक log2
फ़ंक्शन जोड़ा ।