2011-01-13 12 views
6

के रूप में प्राप्त करने के लिए दो सी # बिगइंटर के अंश को परिवर्तित करने का सबसे अच्छा तरीका क्या है जितना संभव हो उतना सटीक बनाए रखने के लिए सबसे अच्छा तरीका क्या है? मेरा वर्तमान समाधान है:दो बिगइंटर के दोहरे

Math.Exp(BigInteger.Log(dividend) - BigInteger.Log(divisor)); 

मुझे अनुमान है कि यह सबोपेटिमल है।

+0

इसकी संभावना नहीं है! यदि आप अंत में युगल चाहते हैं, तो मुझे लगता है कि यह जाने का सबसे अच्छा तरीका है। यदि आप मनमाने ढंग से सटीक फ़्लोटिंग पॉइंट नंबर चाहते हैं, तो कृपया मेरा उत्तर पढ़ें। यह सब BigInteger प्रदान किया जाता है। लॉग युगल उत्पन्न करता है। –

+0

शायद आप एफ # बिग्नम प्रकार का उपयोग कर सकते हैं; वे सीधे विभाजन का समर्थन करते हैं। – Jules

उत्तर

3

पहले पढ़ें this article। इसमें वह शामिल है जो आप करना चाहते हैं।

फिर, लाभांश/विभाजक के निरंतर अंश विस्तार का काम करें, और जब आप सटीकता चाहते थे तो रोकें। आपको पूर्ण महंगी डिवीजन ऑपरेशन की आवश्यकता नहीं होगी (मुझे लगता है कि यह ओ (एन लॉग^2 एन) या ऐसा कुछ है), आपको केवल पूर्णांक विभाजन/शेष की आवश्यकता होगी।

फिर भी, BigInteger.Log को युगल देता है, एक्सप (लॉग ए/लॉग बी) चीज बहुत अच्छा काम करेगी, और मुझे लगता है कि यह निरंतर अंश विस्तार से तेज़ हो सकता है। आपको दो रूपांतरणों की आवश्यकता है (संभवतः तेज़), और सटीकता पूरे ऑपरेशन में संरक्षित है (भले ही लॉग divisor और लॉग लाभांश एक दूसरे के बहुत करीब हैं)।

संबंधित मुद्दे