मेरे पास एक त्वरित है और मैं प्रश्न मान रहा हूं लेकिन मुझे ऑनलाइन कुछ भी नहीं मिला है।
एक अहस्ताक्षरित चार सरणी में तत्वों के औसत की गणना कैसे करें? या इसे और अधिक पसंद करते हैं, एक अहस्ताक्षरित चार पर संचालन करते हैं?
3 जवाब
अंकगणितीय संचालन unsigned char
पर ठीक काम करते हैं, हालांकि आप कभी-कभी इस तथ्य से आश्चर्यचकित हो सकते हैं कि C में अंकगणित हमेशा int
को बढ़ावा देता है।
सी ++ की मानक टेम्पलेट लाइब्रेरी में,
#include <numeric>
template<class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);
unsigned char arr[]
के योग की गणना करने के लिए, आप accumulate(arr, arr + sizeof(arr) / sizeof(arr[0]), 0)
का उपयोग कर सकते हैं। (0 यहाँ एक int
है। आपको किसी भिन्न प्रकार का उपयोग करना अधिक उपयुक्त लग सकता है।)
एसटीएल के बिना, यह तुच्छ रूप से एक लूप के साथ गणना की जाती है।
औसत लंबाई (sizeof(arr) / sizeof(arr[0])
) से विभाजित योग है।
int
प्रकार के चर में संग्रहीत है!
सी ++ 03 और सी ++ 0x:
#include <numeric>
int count = sizeof(arr)/sizeof(arr[0]);
int sum = std::accumulate<unsigned char*, int>(arr,arr + count,0);
double average = (double)sum/count;
ऑनलाइन डेमो : http://www.ideone.com/2YXaT
सी ++ 0x केवल (लैम्ब्डा का उपयोग करके)
#include <algorithm>
int sum = 0;
std::for_each(arr,arr+count,[&](int n){ sum += n; });
double average = (double)sum/count;
ऑनलाइन डेमो : http://www.ideone.com/IGfht
किसी भी चीज़ की तरह के बारे में, आप उन्हें जोड़ते हैं और गिनती से विभाजित करते हैं। अतिप्रवाह से बचने के लिए, आप आमतौर पर गणित करते समय उन्हें किसी बड़ी चीज़ में बदलना चाहेंगे। यदि (जैसा कि सामान्य है) आप एक फ़्लोटिंग पॉइंट परिणाम चाहते हैं, तो आप सभी गणित को फ़्लोटिंग पॉइंट पर भी करना चाहेंगे।
unsigned int
में रखना पूरी तरह से उचित है।
double
है, float
नहीं, क्योंकि float
में अतिप्रवाह की समस्या अधिक होगी (बड़ी संख्या में तत्वों के बाद, लगभग 32k, जोड़े जाते हैं) , और तत्वों को जोड़ने से योग नहीं बदलेगा!) जिनका पता लगाना कठिन है और उनके आसपास काम करना कठिन है। IMO, किसी भी समय फ्लोटिंग पॉइंट का उपयोग करके आप वास्तव में नहीं चाहते हैं कि इसका शब्दार्थ एक बहुत बड़ी प्रोग्रामिंग त्रुटि है जो आपको तब तक काटती है जब तक कि आप संख्यात्मक विश्लेषण के विशेषज्ञ न हों।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।
[c]
और[c++]
टैग समान नहीं हैं!)