बिना मैं एक struct गैर नकारात्मक तर्कसंगत संख्या p/q का प्रतिनिधित्व किया है:तर्कसंगत से गुणा पूर्णांक मध्यवर्ती अतिप्रवाह
struct rational {
uint64_t p;
uint64_t q; // invariant: always > 0
};
मैं एक uint64 n
के आधार पर अपने तर्कसंगत गुणा और एक पूर्णांक परिणाम प्राप्त करना चाहते हैं, पूर्णांक। जो है, मैं गणना करने के लिए करना चाहते हैं:
uint64_t m = (n * r.p)/r.q;
जबकि n * r.p
में मध्यवर्ती अतिप्रवाह से परहेज। (बेशक अंतिम परिणाम अतिप्रवाह हो सकता है, जो स्वीकार्य है।)
मैं यह कैसे कर सकता हूं? क्या उच्च-गुणा के बिना ऐसा करने का कोई तरीका है?
(मैं बढ़ावा :: तर्कसंगत को देखा है, लेकिन यह इस सुविधा प्रदान करने के लिए यह मौजूद नहीं था।)
यह 'uint64_t मीटर = (एन/r.q) * r.p' के साथ काम नहीं करेंगे? – dangom
तर्कसंगत संख्या 'n/r.q' की गणना करें, और इसे अपने निम्नतम रूप में कम करें, फिर इसे 'r.p' से गुणा करें। – Barmar
@DanielG, बाड़मेर: यदि इनमें से कोई भी सहायता नहीं है तो 'p == n' और' p