दिलचस्प पोस्ट
जावास्क्रिप्ट आइडरपर (माउस कर्सर के नीचे पिक्सेल का रंग बताएं) कैसे जावास्क्रिप्ट के साथ छोटे सरणियों में एक लंबी सरणी को विभाजित किया जाए क्या एक ईवेंट हैंडलर को एक नियंत्रण से "चोरी" करना संभव है और इसे किसी दूसरे को दे सकता है? क्या मुझे एएसपी.नेट एमवीसी में स्थानांतरित करना चाहिए? सी में एक अलग फ़ंक्शन में एक सूचक को प्रारंभ करना सेशनस्टेट और व्यूस्टेट के बीच अंतर क्या है? Socket.io के साथ PHP का उपयोग करना ग्लोबल इंटरप्रेटर लॉक क्यों? क्या जावा में गतिशील रूप से क्लासपाथ को "जोड़ना" संभव है? पाप्लोट स्कैटर साजिश मार्कर का आकार हास्केल प्रकार एक साधारण 'औसत' समारोह निराशाजनक फ़ंक्शन के भीतर से ग्लोबल एएनवीवी को कई ऑब्जेक्ट सौंपें `Enable_shared_from_this` की उपयोगिता क्या है? सी में नेस्टेड फ़ंक्शन प्रत्यक्ष बनाम नियुक्त – jQuery .on ()

क्यों पो (n, 2) 24 को वापस करता है जब n = 5, मेरे कंपाइलर और ओएस के साथ?

#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int n,i,ele; n=5; ele=pow(n,2); printf("%d",ele); return 0; } 

आउटपुट 24

मैं कोड :: ब्लॉकों में जीएनयू / जीसीसी का उपयोग कर रहा हूँ।

क्या हो रहा है?

मुझे पता है कि pow समारोह double लौटता है, लेकिन 25 एक पूर्णांक में फिट होता है, इसलिए यह कोड 24 बजाय 24 प्रिंट करता है? यदि n=4; n=6; n=3; n=2; n=4; n=6; n=3; n=2; कोड काम करता है, लेकिन पांच के साथ यह नहीं है।

वेब के समाधान से एकत्रित समाधान "क्यों पो (n, 2) 24 को वापस करता है जब n = 5, मेरे कंपाइलर और ओएस के साथ?"

यहाँ क्या हो रहा है यहाँ है। आप अपने कम्पाइलर के pow समारोह के कार्यान्वयन को देखकर इसकी पुष्टि कर पाएंगे:

मान लें कि आपके पास सही # शामिल है, (सभी पिछली उत्तर और इसके बारे में टिप्पणियां सही हैं – दी गई अनुमति के लिए #include फ़ाइलों को नहीं लें), मानक pow समारोह के लिए प्रोटोटाइप यह है:

double pow(double, double);

और आप इस तरह pow कह रहे हैं:

pow(5,2);

pow समारोह एक एल्गोरिथ्म के माध्यम से चला जाता है (संभवतः लॉगरिदम का उपयोग करना), इस प्रकार पावर वैल्यू को मापने के लिए फ्लोटिंग प्वाइंट फ़ंक्शन और वैल्यू का उपयोग करता है।

pow फंक्शन "एक्सए कुल ऑफ एन बार" के एक भोलेपन के माध्यम से नहीं जाता है, क्योंकि उसे आंशिक घाटियों का उपयोग करके pow गणना भी करना पड़ता है, और आप इस तरह से आंशिक शक्तियों की गणना नहीं कर सकते।

इतना अधिक होने की संभावना है, मापदंडों 5 और 2 का उपयोग करके पा के गणना में मामूली घूर्णन त्रुटि हुई। जब आप किसी int को निर्दिष्ट करते हैं, तो आपने आंशिक मूल्य को छोटा कर दिया था, इस प्रकार 24 देना

यदि आप पूर्णांक का उपयोग कर रहे हैं, तो आप अपना खुद का "इंटवॉ" या समान फ़ंक्शन भी लिख सकते हैं, जो कि आवश्यक समय की संख्या को गुणा करता है। इसके लाभ हैं:

  1. आप ऐसी स्थिति में नहीं जाएंगे जहां आपको pow का इस्तेमाल करने के लिए सूक्ष्म गोलिंग त्रुटियां मिलेंगी।

  2. आपके intpow समारोह अधिक से अधिक रन की तुलना में तेजी से एक समान कॉल करने के लिए कॉल करेंगे।

आपको डबल्स के लिए एक फ़ंक्शन से इंट का परिणाम चाहिए।

आपको शायद इस्तेमाल करना चाहिए

 ele=(int)(0.5 + pow(n,2)); /* ^ ^ */ /* casting and rounding */ 

यदि आप #include <math.h> नहीं करते हैं तो कंपाइलर pow() के लिए तर्कों के प्रकारों को नहीं जानता है जो कि दोनों में int नहीं है – इसलिए आपको एक अपरिभाषित परिणाम प्राप्त होता है। आपको 24 मिलता है, मुझे 16418 मिलता है

जब आप चर के साथ पाउ का उपयोग करते हैं, तो उसका परिणाम double किसी int को सौंपने से यह छोटा होता है

तो आप pow परिणाम को double या float चर के अनुसार निर्दिष्ट करके इस त्रुटि से बच सकते हैं।

तो मूल रूप से

यह exp(log(x) * y) जो एक नतीजा उत्पन्न करेगा जो ठीक से x^y के समान नहीं है – बस एक अजीब बिंदु मान के रूप में करीब सन्निकटन। तो उदाहरण के लिए 5^2 24.9999996 या 25.00002 हो जाएगा

फ़्लोटिंग-पॉइंट अंकगणित सटीक नहीं है

यद्यपि छोटे मूल्यों को जोड़ा जा सकता है और ठीक से घटाया जा सकता है, pow() फ़ंक्शन सामान्यतः लॉगरिदम गुणा करके काम करता है, इसलिए भले ही इनपुट दोनों सटीक हों, परिणाम न हो। हमेशा की तरह अंतर को सौंपना, इसलिए यदि असहत्व नकारात्मक है, तो आपको 25 से 25 की संख्या मिल जाएगी।

इस कहानी का नैतिक पूर्णांक पर पूर्णांक के संचालन का उपयोग करना है, और वास्तविक तर्कों को पदोन्नत या छोटा करने के लिए <math.h> कार्यों का संदेह होना चाहिए। यह दुर्भाग्यपूर्ण है कि जब तक आप जोड़ नहीं करते हैं जीसीसी आपको चेतावनी नहीं -Wfloat-conversion (यह -Wall -Wextra में संभवतः नहीं है, शायद क्योंकि ऐसे कई मामले हैं जहां इस तरह के रूपांतरण का अनुमान है और चाहते हैं)।

पूर्णांक शक्तियों के लिए, यह pow() बजाय गुणा (विभाजन अगर ऋणात्मक) का उपयोग करने के लिए हमेशा सुरक्षित और तेज़ होता है – इसके बाद की आवश्यकता के लिए आरक्षित आरक्षित करें! अतिप्रवाह के जोखिम के बारे में पता है, यद्यपि।