2012-03-28 13 views
7

<math.h> एस के लिए log(1+x) की गणना के लिए एक और सटीक विधि प्रदान करता है।लॉग (1 + x) लॉग 1p के रूप में लॉग (1-x) है?

log(1-x) कंप्यूटिंग के लिए एक समान सटीक तरीका है?

कारण मैं पूछता हूं क्योंकि मैं अधिक सटीकता के लिए लॉग-स्पेस में कुछ काम करने की कोशिश कर रहा हूं (मैं अधिकतर गुणा और शून्य के बहुत करीब संख्याओं को जोड़ रहा हूं)। मुझे log1p का उपयोग करके log(exp(log_of_a) + exp(log_of_b)) = log(a + b) देता है जो एक फ़ंक्शन लिखना आसान लगता है। मैं अंतर के लिए एक समान कार्य करने की कोशिश कर रहा हूं:

log(exp(log_of_a) - exp(log_of_b)) = log(a - b) जहां a > b, ज़ाहिर है।

अनिवार्य रूप से, जब तक न log_a या log_b== -inf के रूप में, समारोह बस लौटना चाहिए:

return log(1 - exp(log_b-log_a)) + log_a; 

मेरी log_add समारोह में, मैं एक log(1 + ...) साथ खत्म हो, और इसलिए मैं log1p का उपयोग करें। लेकिन यहां मेरे पास log(1 - ...) है। शायद ज़रुरत पड़े, मैं भी log1m googled, लेकिन कोई किस्मत ...

जब तर्क x रेंज [-inf, 1) में है, तो मैं बस log1p(-x) इस्तेमाल कर सकते हैं (मेरे जोर a > b दिया)।

क्या सर्वोत्तम इसे हल करने के लिए सबसे अच्छा तरीका है? मुझे लगता है कि मुझे पहले ऐसा किया जा रहा है जो पहले किया गया है ...

मैं वास्तव में आपकी सहायता की सराहना करता हूं कि मैं सबसे सटीक परिणाम कैसे प्राप्त कर सकता हूं (या समझाता हूं कि मुझे इससे अधिक सटीक परिणाम क्यों नहीं मिल सकते हैं)।

+1

मुझे लगता है कि आप 'लॉग (exp (log_of_a) - exp (log_of_b)) = log (a - b) ', सही है? आपके पास 'ए ​​+ बी' है। – Gabe

+0

+1 ओह! अच्छी पकड़। देर हो चुकी है ... – user

+11

फ़्लोटिंग पॉइंट नंबरों की नकारात्मकता सटीक है, इसलिए 'log1p (-x) '' log1p (x) 'के रूप में सटीक है। –

उत्तर

10

@ रेमंड चेन इस पर है: "फ्लोटिंग पॉइंट नंबरों की नकारात्मकता सटीक है, इसलिए log1p(-x)log1p(x) जितना सटीक है।" बस इसे एक वास्तविक जवाब में बनाते हैं।

+0

तो मैं * इस पर विचार कर रहा था ... – user

+2

log1p (-x) वास्तव में ऐसा करने का एक अच्छा तरीका है, लेकिन मुझे लगता है कि यह जवाब भ्रामक है कि ऐसा लगता है कि यह एक सटीक बयान बना रहा है लेकिन यह वास्तव में नहीं है। यदि आपको लगता है कि, कृपया सही कहें कि "सटीक" के रूप में आपका क्या मतलब है, और फिर "फ्लोटिंग पॉइंट नंबरों की अस्वीकृति सटीक" से लीप को स्पष्ट करें "log1p (-x) लॉग 1p (x) के रूप में सटीक है" । –