गुड मॉर्निंग सभी में प्रेसिजन साथ जारी करना,रूबी फ्लोटिंग प्वाइंट मठ - योग कैल्क
मैं चल बिन्दु गणित के साथ कुछ समस्याएं आ रही हैं, और मिल गया पूरी तरह से ".to_f" में खो दिया है की, "* 100" और ".0" है!
मुझे उम्मीद थी कि कोई मेरी विशिष्ट समस्या के साथ मेरी मदद कर सकता है, और यह भी समझा सकता है कि उनका समाधान क्यों काम करता है ताकि मैं अगली बार इसे समझ सकूं। एक का मान सेट -,
- योग दशमलव की एक सूची में यदि वे वास्तव में 1.0
- योग 1.0 के बीच एक अंतर और संख्याओं का योग का निर्धारण का निर्धारण:
मेरे कार्यक्रम दो काम करने की जरूरत है योग बराबर 1.0 बनाने के लिए सटीक अंतर के लिए परिवर्तनीय।
उदाहरण के लिए:
[0.28, 0.55, 0.17] ->, 1.0 करने के लिए योग करना चाहिए लेकिन मैं 1.xxxxxx जा रहे हैं। मैं निम्नलिखित फैशन में योग को लागू कर रहा हूँ:
sum = array.inject(0.0){|sum,x| sum+ (x*100)}/100
कारण मैं इस कार्यक्षमता की जरूरत है कि मैं दशमलव कि एक्सेल से आते हैं का एक सेट में पढ़ रहा हूँ है। वे 100% सटीक नहीं हैं (उनमें कुछ दशमलव बिंदुओं की कमी है) इसलिए आमतौर पर योग 0.999 999xxxxx या 1.000xxxxx से बाहर आता है। उदाहरण के लिए, मैं निम्नलिखित की तरह मूल्य मिलेगा:
0.568887955,0.070564759,0.360547286
इसे ठीक करने के, मैं पहले n-1 संख्याओं का योग लेने, और फिर अंतिम नंबर बदलने से थोड़ा तो ठीक हूँ के सभी कि संख्याओं को एक साथ योग 1.0 (उपरोक्त समीकरण का उपयोग करके सत्यापन को पूरा करना होगा, या जो कुछ भी मैं समाप्त करता हूं)। इस प्रकार मैं इस समय इस लागू करने हूँ:
sum = 0.0
array.each do |item|
sum += item * 100.0
end
array[i] = (100 - sum.round)/100.0
मैं जानता हूँ कि मैं सुई के साथ ऐसा कर सकता है, लेकिन इसके साथ खेलने के लिए क्या काम करता है देखने के लिए कोशिश कर रहा था। मुझे लगता है कि यह आम तौर पर काम कर रहा है (आउटपुट की जांच से), लेकिन यह हमेशा उपरोक्त सत्यापन योग को पूरा नहीं करता है। तो अगर जरूरत हो तो मैं इसे भी समायोजित कर सकता हूं। ध्यान दें कि मुझे इन संख्याओं में केवल दो दशमलव परिशुद्धता की आवश्यकता है - यानी 0.56 0.5623225 नहीं। मैं प्रस्तुति के समय या फिर इस गणना के दौरान उन्हें गोल कर सकता हूं ... इससे कोई फर्क नहीं पड़ता।
आपकी मदद के लिए बहुत बहुत धन्यवाद!
धन्यवाद! उपयोगी जवाब – Brandon