क्यों Math.pow (0, 0) === 1 है?


84

हम सभी जानते हैं कि 0 0 अनिश्चित है।

लेकिन , जावास्क्रिप्ट का कहना है कि:

Math.pow(0, 0) === 1 // true

और सी ++ एक ही बात कहता है:

pow(0, 0) == 1 // true

क्यों?

मुझे पता है:

>Math.pow(0.001, 0.001)
0.9931160484209338

लेकिन Math.pow(0, 0)कोई त्रुटि क्यों नहीं है? या शायद NaNइससे बेहतर होगा 1


3
@zzzzBov: मानक परिभाषा के तहत, "a <सुप> b </ sup> = exp (b ln (a))", यह अपरिभाषित है। इसे "सीमा <उप> x-> 0 </ sub> f (x) <सुप> जी (x) </ sup>" जहां "च" और "जी" दोनों को शून्य की सीमा के रूप में परिभाषित करने की कोशिश एक अनिश्चित संकेत देती है। मूल्य, चूंकि यह आपकी पसंद के कार्यों पर निर्भर करता है। (मांगे गए नोटेशन के लिए माफी; मैं यह नहीं समझ सकता कि टिप्पणियों में सुपरस्क्रिप्ट कैसे प्राप्त करूं)।
माइक सेमोर

@MikeSeymour, हाँ, मुझे पता है कि 0 use (यूनिकोड वर्णों का उपयोग करें) की परिभाषा अपरिभाषित है, हालाँकि, यदि आप मेरी टिप्पणी पढ़ते हैं, तो आपको ध्यान देना चाहिए कि उद्धरण किसी "मानक परिभाषा" के बजाय "गणित की दुनिया" का संदर्भ देता है। यह अंतर है कि मैं मूल रूप से संदर्भित कर रहा था, और इस बारीकियों को ठीक करने के लिए प्रश्न को अपडेट किया गया है।
zzzzBov

2
@AJMansfield उम ... गैर शून्य के लिए एक ^ 0 = 1।
बिसका

यह ऐसे कार्यों की अनुमति देता है जो समझदार परिणाम देने के लिए संभावनाओं के उत्पादों पर निर्भर करते हैं। यह एक गलत धारणा है कि कंप्यूटर प्रतीकात्मक गणित प्रोसेसर हैं। सी भाषा का वास्तविक दुनिया में एक विशिष्ट कार्यान्वयन है जबकि आपका गणितीय दुनिया सिलिकॉन में लागू होने के लिए बहुत आदर्श हो सकता है।
IRTFM

26
इस प्रश्न के गणितीय संस्करण के लिए - "हम अक्सर 0 ^ 0 = 1 को परिभाषित क्यों करते हैं?" - math.stackexchange के कई अच्छे उत्तर हैं: math.stackexchange.com/questions/11150/…
PLL

जवाबों:


78

C ++ में pow (0, 0) के परिणाम मूल रूप से कार्यान्वयन परिभाषित व्यवहार है क्योंकि गणितीय रूप से हमारे पास एक विरोधाभासी स्थिति है जहां N^0हमेशा होना चाहिए 1लेकिन 0^Nहमेशा के 0लिए N > 0होना चाहिए, इसलिए आपको गणितीय रूप से इस के परिणाम के रूप में कोई अपेक्षा नहीं होनी चाहिए। यह वुल्फराम अल्फा फोरम पोस्ट थोड़ा और अधिक विवरण में जाता है।

यद्यपि pow(0,0)परिणाम होने के कारण अंतर्राष्ट्रीय मानक-प्रोग्रामिंग भाषाओं के लिए तर्क के1 रूप में कई अनुप्रयोगों के लिए उपयोगी है - सी राज्यों में IEC 60559 अस्थायी-बिंदु अंकगणितीय समर्थन शामिल है:

आम तौर पर, C99 एक NaN परिणाम से बचता है जहां एक संख्यात्मक मूल्य उपयोगी होता है। [...] pow (∞, 0) और pow (0,0) के परिणाम दोनों 1 हैं, क्योंकि ऐसे अनुप्रयोग हैं जो इस परिभाषा का फायदा उठा सकते हैं। उदाहरण के लिए, यदि x (p) और y (p) कोई विश्लेषणात्मक कार्य हैं जो p = a, तो pow (x, y) पर शून्य हो जाते हैं, जो exp (y * log (x)) के बराबर होता है, तो p दृष्टिकोण के रूप में 1 आता है। ए।

C ++ अपडेट करें

के रूप में leemes सही ढंग से कहा मैं मूल रूप से के लिए संदर्भ से जुड़ा हुआ जटिल के संस्करण पॉव जबकि गैर जटिल संस्करण का दावा है यह है डोमेन त्रुटि मसौदा सी ++ मानक के लिए वापस गिर जाता मसौदा सी मानक और दोनों C99 और C11 खंड में 7.12.7.4 पॉव कार्यों पैरा 2 कहते हैं ( मेरा जोर ):

[...] एक डोमेन त्रुटि तब हो सकती है यदि x शून्य है और y शून्य है। [...]

जो जहाँ तक मैं साधन इस व्यवहार कर रहा है बता सकते हैं अनिर्दिष्ट व्यवहार एक सा खंड पीठ समापन 7.12.1 त्रुटि की स्थिति के उपचार का कहना है:

[...] एक डोमेन त्रुटि तब होती है जब एक इनपुट तर्क उस डोमेन के बाहर होता है जिस पर गणितीय फ़ंक्शन परिभाषित होता है। [...] एक डोमेन त्रुटि पर, फ़ंक्शन एक कार्यान्वयन-परिभाषित मान लौटाता है; यदि पूर्णांक अभिव्यक्ति math_errhandling और MATH_ERRNO नॉनज़ेरो है, तो पूर्णांक अभिव्यक्ति इरान मान EDOM प्राप्त करता है; [...]

इसलिए यदि कोई डोमेन त्रुटि थी, तो यह क्रियान्वित परिभाषित व्यवहार होगा, लेकिन दोनों के नवीनतम संस्करणों में gccऔर clangइसका मूल्य है errno, 0इसलिए यह उन कंपाइलरों के लिए एक डोमेन त्रुटि नहीं है ।

जावास्क्रिप्ट अद्यतन करें

के लिए जावास्क्रिप्ट ECMAScript® भाषा विशिष्टता खंड में 15.8 मठ वस्तु के तहत 15.8.2.13 पॉव (एक्स, वाई) कि अन्य शर्तों के बीच का कहना है:

यदि y +0 है, तो परिणाम 1 है, भले ही x NaN हो।


1
@ मैं मानता हूं कि पृष्ठ गलत है, मानक यह नहीं कहता है कि NaN को लौटा दिया जाना चाहिए। वापसी मूल्य कार्यान्वयन-परिभाषित है। cplusplus.com जो आप का दावा है कि एक विश्वसनीय स्रोत नहीं है वास्तव में यहाँ अधिक सटीक है।
अंतरजाल

@interjay मुझे लगता है कि आप हटाए गए उत्तर का मतलब है; मैंने केवल इसकी अयोग्यता के बारे में उद्धृत किया है, उम्मीद है कि यह डाउनवोट (जो मेरे द्वारा नहीं था) को समझा सकता है। खैर, दोनों पृष्ठ विकी हैं, इसलिए उनकी विश्वसनीयता उनके संपादकों पर निर्भर करती है जो मानवीय हैं और गलतियाँ करते हैं। ;)
leemes


@ शफीक्यगहमौर मैंने एक ही प्रश्न (हटाए गए उत्तर में) से जोड़ा।
leemes

1
@ मैं प्रतिक्रिया की सराहना करता हूं, मैं उन उत्तरों को लिखने की कोशिश करता हूं जो मैं दूसरों से पढ़ना चाहता हूं। मैं हमेशा सफल नहीं होता, लेकिन मैं कोशिश करता हूं। अच्छे प्रश्न लिखना और भी कठिन है, मैंने केवल यह प्रयास किया है कि एक बार और मैंने इस पर अधिक समय व्यतीत किया तब मैं अपने उत्तरों पर करता हूं।
शफिक याघमोर

35

जावास्क्रिप्ट Math.powमें निम्नानुसार परिभाषित किया गया है :

  • यदि y NaN है, तो परिणाम NaN है।
  • यदि y +0 है, तो परिणाम 1 है, भले ही x NaN हो।
  • यदि y y0 है, तो परिणाम 1 है, भले ही x NaN हो।
  • यदि x NaN है और y nonzero है, तो परिणाम NaN है।
  • यदि abs (x)> 1 और y + the है, तो परिणाम +> है।
  • यदि abs (x)> 1 और y (है, तो परिणाम +0 है।
  • यदि abs (x) == 1 और y + the है, तो परिणाम NaN है।
  • यदि abs (x) == 1 और y the है, तो परिणाम NaN है।
  • यदि abs (x) <1 और y + (है, तो परिणाम +0 है।
  • यदि abs (x) <1 और y −∞ है, तो परिणाम + <है।
  • यदि x + x और y> 0 है, तो परिणाम + ∞ है।
  • यदि x + x और y <0 है, तो परिणाम +0 है।
  • यदि x odd और y> 0 है और y एक विषम पूर्णांक है, तो परिणाम −∞ है।
  • यदि x an और y> 0 है और y एक विषम पूर्णांक नहीं है, तो परिणाम + −∞ है।
  • यदि x odd और y <0 है और y एक विषम पूर्णांक है, तो परिणाम .0 है।
  • यदि x an और y <0 है और y एक विषम पूर्णांक नहीं है, तो परिणाम +0 है।
  • यदि x +0 और y> 0 है, तो परिणाम +0 है।
  • यदि x +0 और y <0 है, तो परिणाम + and है।
  • यदि x an0 और y> 0 है और y एक विषम पूर्णांक है, तो परिणाम −0 है।
  • यदि x not0 और y> 0 है और y एक विषम पूर्णांक नहीं है, तो परिणाम +0 है।
  • यदि x an0 और y <0 है और y एक विषम पूर्णांक है, तो परिणाम − है।
  • यदि x not0 और y <0 है और y एक विषम पूर्णांक नहीं है, तो परिणाम + − है।
  • यदि x <0 और x परिमित है और y परिमित है और y पूर्णांक नहीं है, तो परिणाम NaN है।

जोर मेरा

एक सामान्य नियम के रूप में, किसी भी भाषा के मूल कार्यों को भाषा विनिर्देश में वर्णित अनुसार काम करना चाहिए। कभी-कभी इसमें स्पष्ट रूप से "अपरिभाषित व्यवहार" शामिल होता है, जहां यह लागू करने वाले के लिए निर्धारित होता है कि परिणाम क्या होना चाहिए, हालांकि यह अपरिभाषित व्यवहार का मामला नहीं है।


C99 और C11 मानकों में अनुलग्नक F में यही विनिर्देशन है। एक कार्यान्वयन __STDC_IEC_559__यह घोषणा करने के लिए परिभाषित करने वाला है कि यह इस विनिर्देश के अनुरूप है। अनुलग्नक एफ IEC 60559 फ्लोटिंग-पॉइंट अंकगणित का वर्णन करता है। मेरा मानना ​​है कि एक सी विनिर्देश आंशिक रूप से अनुलग्नक एफ (उदाहरण के लिए पाउ (0, 0) == 1) के अनुरूप है और परिभाषित नहीं है __STDC_IEC_559__
हावर्ड हिनान्ट

@HowardHinnant हममम, यह उस के मामले में लगता है जीसीसी और बजना है कि सूचना का टुकड़ा पूरी तरह से उपयोगी नहीं हो सकता है, कि हतोत्साहित किया जाता है।
शैफिक याघमौर

6
मुझे नहीं पता कि यह उत्तर मदद करता है। बेशक फ़ंक्शन को प्रदर्शन करना चाहिए क्योंकि यह कल्पना में परिभाषित किया गया है। लेकिन फिर सवाल सिर्फ यह हो जाता है कि "इस तरह से इसे कल्पना में क्यों परिभाषित किया गया था?"
बिसका

अच्छी बात यह है कि (शायद) हार्डवेयर में किया गया है, अन्यथा यह इन सभी विशेष मामलों के साथ प्रदर्शन को शून्य कर देगा :)
थॉमस

16

यह केवल इसे परिभाषित करने 1, 0या इसे छोड़ने के लिए सम्मेलन है undefinedपॉव (0,0)निम्नलिखित परिभाषा के कारण परिभाषा व्यापक रूप से फैली हुई है:

गणितीय शक्ति परिभाषा


ECMA- स्क्रिप्ट प्रलेखन निम्नलिखित के बारे में कहता है pow(x,y):

  • यदि y +0 है, तो परिणाम 1 है, भले ही x NaN हो।
  • यदि y y0 है, तो परिणाम 1 है, भले ही x NaN हो।

[ http://www.ecma-international.org/ecma-262/5.1/#sec-15.8.2.13 ]


3
math.stackexchange की परिभाषा के लिए बहुत अच्छी चर्चा और स्पष्टीकरण है। 0 ^ 0 = 1: math.stackexchange.com/questions/11150/…
PLL

14

विकिपीडिया के अनुसार:

एक्सपोर्टर में निरंतरता को शामिल नहीं करने वाली अधिकांश सेटिंग्स में, 0 0 को 1 के रूप में व्याख्या करना सूत्रों को सरल बनाता है और प्रमेयों में विशेष मामलों की आवश्यकता को समाप्त करता है।

प्रत्येक के लिए 0**0पेशेवरों और विपक्षों के साथ व्यवहार करने के कई संभावित तरीके हैं ( विकिपीडिया को विस्तारित चर्चा के लिए देखें )।

आईईईई 754-2008 चल बिन्दु मानक तीन अलग-अलग कार्यों की सिफारिश की:

  • powके 0**0रूप में व्यवहार करता है 1। यह सबसे पुराना परिभाषित संस्करण है। यदि शक्ति एक सटीक पूर्णांक है तो परिणाम इसके लिए समान है pown, अन्यथा परिणाम powrकुछ असाधारण मामलों को छोड़कर ( जैसा है )।
  • pown1 के रूप में 0 ** 0 व्यवहार करता है। शक्ति का सटीक पूर्णांक होना चाहिए। मान को नकारात्मक आधारों के लिए परिभाषित किया गया है; जैसे, pown(−3,5)है −243
  • powr0 ** 0 को NaN (नॉट-ए-नंबर - अपरिभाषित) मानते हैं। मूल्य उन मामलों के लिए भी NaN है, powr(−3,2)जहां आधार शून्य से कम है। मूल्य ऍक्स्प (पावर '× लॉग (बेस)) द्वारा परिभाषित किया गया है।

6

डोनाल्ड नथ

1992 में इस बहस को निम्नलिखित के साथ हल किया:

यहाँ छवि विवरण दर्ज करें

और अपने पेपर टू नोट्स इन नोटेशन पर विवरण में और भी अधिक गए ।

मूल रूप से, जबकि हमारे पास f(x)/g(x)सभी कार्यों के लिए सीमा के रूप में 1 नहीं है f(x)और g(x), यह अभी भी कॉम्बिनेटरिक्स को परिभाषित करने के लिए बहुत सरल बनाता है 0^0=1, और फिर कुछ स्थानों पर विशेष मामले बनाते हैं जहां आपको कार्यों पर विचार करने की आवश्यकता होती है 0^x, जैसे कि वैसे भी अजीब हैं। सब x^0के बाद एक बहुत अधिक बार आता है।

इस विषय (नॉथ पेपर के अलावा) के कुछ सबसे अच्छे विचार-विमर्श मैं कर रहे हैं:


यदि आपने शून्य शक्ति में उत्तर पढ़ने के लिए कुछ नहीं पढ़ा है तो ...? जो इस सवाल से जुड़ा हुआ था, आपको कुछ जवाबों के साथ इस दृष्टिकोण को भी शामिल करना चाहिए।
शफीक यघमौर

5

आप को पता है क्या मूल्य आप के लिए देना चाहिए चाहते हैं f(a)जब fसीधे गणनीय नहीं है a, तो आप की सीमा की गणना fजब xकी ओर जाता है a

x^yसामान्य सीमा के मामले में , सामान्य सीमाएं 1तब होती हैं, जब वे xऔर की ओर जाती yहैं 0, और विशेष रूप x^xसे 1जब झुकती हैं, तब तक xझुक जाती हैं 0

Http://www.math.hmc.edu/funfacts/ffiles/10005.3-5.shtml देखें


5

सी भाषा की परिभाषा कहती है (7.12.7.4/2):

यदि x शून्य और y शून्य है तो डोमेन त्रुटि हो सकती है।

यह भी कहता है (7.12.1 / 2):

एक डोमेन त्रुटि पर, फ़ंक्शन कार्यान्वयन-परिभाषित मान लौटाता है; यदि पूर्णांक अभिव्यक्ति math_errhandling और MATH_ERRNO नॉनज़ेरो है, तो पूर्णांक अभिव्यक्ति इरान मान EDOM प्राप्त करता है; यदि पूर्णांक अभिव्यक्ति math_errhandling और MATH_ERREXCEPT नॉनज़ेरो है, तो '' अमान्य '' फ़्लोटिंग-पॉइंट अपवाद उठाया जाता है।

डिफ़ॉल्ट रूप से, का मान math_errhandlingहै MATH_ERRNO, इसलिए errnoमान के लिए जाँच करें EDOM


1
Whoups! यह वास्तव में दिलचस्प है! मैंने अपने cpp फ़ाइल का उपयोग करके संकलित कियाg++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.
Ionică Bizău

0

मैं पिछले कुछ उत्तरों के दावे से असहमत होना चाहूंगा कि यह कन्वेंशन या सुविधा की बात है (विभिन्न प्रमेयों के लिए कुछ विशेष मामलों को कवर करना, आदि) कि 0 ^ 0 के बजाय 1 के रूप में परिभाषित किया जाना चाहिए।

घातांक वास्तव में हमारे अन्य गणितीय संकेतन के साथ अच्छी तरह से फिट नहीं है, इसलिए परिभाषा हम सभी भ्रम के लिए छोड़ देते हैं। इसके निकट आने का थोड़ा अलग तरीका यह है कि ^ b (या ऍक्स्प (a, b), यदि आपको पसंद है) मान को गुणात्मक रूप से किसी दूसरी चीज़ को बार-बार b से गुणा करने के बराबर देता है ।

जब हम 5 को 4, 2 बार से गुणा करते हैं, तो हमें 80 मिलता है। हमने 5 को 16 से गुणा किया है। इसलिए 4 ^ 2 = 16 है।

जब आप 14 को 0, 0 से गुणा करते हैं, तो हम 14. के साथ रह जाते हैं। हमने इसे 1. गुणा किया है। इसलिए, 0 ^ 0 = 1।

नकारात्मक और भिन्नात्मक घातांक को स्पष्ट करने के लिए सोच की यह रेखा भी मदद कर सकती है। 4 ^ (- 2) एक 16 वीं है, क्योंकि 'नकारात्मक गुणन' विभाजन है - हम चार बार दो से विभाजित करते हैं।

^ ^ (1/2) रूट (ए) है, क्योंकि किसी चीज को जड़ से गुणा करना आधा गुणा का काम है, इसे खुद से गुणा करना - आपको इसे दो बार करना होगा 4 = 4 ^ 1 = से कुछ गुणा करना होगा (4 ^ (1/2)) ^ 2


0

यह समझने के लिए आपको पथरी को हल करने की आवश्यकता है:

यहाँ छवि विवरण दर्ज करें

x^xटेलर सीरीज़ का उपयोग करते हुए लगभग शून्य का विस्तार , हमें मिलता है:

यहाँ छवि विवरण दर्ज करें

इसलिए यह समझने के लिए कि xशून्य पर जाने पर सीमा के साथ क्या हो रहा है, हमें यह पता लगाने की आवश्यकता है कि दूसरे कार्यकाल के साथ क्या हो रहा है x log(x), क्योंकि अन्य शब्द x log(x)कुछ शक्ति के लिए आनुपातिक हैं ।

हमें परिवर्तन का उपयोग करने की आवश्यकता है:

यहाँ छवि विवरण दर्ज करें

अब इस परिवर्तन के बाद हम L'Hôpital के नियम का उपयोग कर सकते हैं , जो बताता है कि:

यहाँ छवि विवरण दर्ज करें

इसलिए उस परिवर्तन को प्राप्त करना जो हमें मिलता है:

यहाँ छवि विवरण दर्ज करें

इसलिए हमने गणना की है कि log(x)*xx के दृष्टिकोण से शब्द 0 आता है। यह देखना आसान है कि अन्य लगातार शब्द भी शून्य से और दूसरे शब्द से भी तेज हैं।

तो बिंदु पर x=0, श्रृंखला बन जाती है 1 + 0 + 0 + 0 + ...और इस प्रकार 1 के बराबर होती है।


हालांकि यह उत्तर प्रभावशाली है, यह ध्यान देने योग्य है कि गणित में, x-> a (f) की सीमा को आवश्यक रूप से f (a) के बराबर नहीं किया जाता है, जब तक कि फ़ंक्शन x पर निरंतर न हो।
jasonszhao
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.