2013-06-02 7 views
14

को देखते हुए दो पूर्णांकों:`a^b` एक संख्यात्मक क्यों लौटाता है जब दोनों` a` और `b` पूर्णांक होते हैं?

a <- 1L 
b <- 1L 

जैसा कि मैंने उम्मीद होती है, बताया घटाकर, या उन्हें भी गुणा एक पूर्णांक देता है:

class(a + b) 
# [1] "integer" 
class(a - b) 
# [1] "integer" 
class(a * b) 
# [1] "integer" 

लेकिन उन्हें विभाजित एक अंकीय देता है:

class(a/b) 
# [1] "numeric" 

मुझे लगता है कि मैं समझ सकता हूं क्यों: क्योंकि पूर्णांक के अन्य संयोजन (उदाहरण के लिए a <- 2L और b <- 3L) एक संख्यात्मक, यह अधिक सामान्य हमेशा एक संख्यात्मक वापस करने के लिए करने के लिए चीज है।

अब घातांक पर:

class(a^b) 
# [1] "numeric" 

यह एक मेरे लिए एक आश्चर्य का एक सा है। क्या कोई यह समझा सकता है कि इसे इस तरह क्यों डिजाइन किया गया था?

+2

मुझे लगता है कि ऐसा इसलिए है क्योंकि परिणाम 'इन्फ'' हो सकता है ?? 'as.integer (Inf) 'का परिणाम' एनए' होगा। पूर्व: 2 एल^10000L – Arun

+1

जबकि मुझे चयनित उत्तर पसंद है, शायद कोई पूछ सकता है कि एक्सपोनेंटिएशन के लिए वास्तविक कोड रखने के लिए कोई और फायदा है, फिर भी एक और "कोने केस" बनाएं। खासकर अगर 'आर' कोड या 'यूनिक्स' 'पाउ' फ़ंक्शन जिसे पहले स्थान पर एक्सपोनेंट की गणना करने के लिए लॉग का उपयोग किया जा सकता है। –

उत्तर

17

यह उस मामले को शामिल करता है जब एक्सपोनेंट नकारात्मक होता है।

6

पर विचार करें, f(a)(b) = a^b कार्यों के परिवार के रूप में। a=2 के लिए, जिस डोमेन के लिए यह पूर्णांक देता है वह मानों तक सीमित है [0,62] (64-बिट हस्ताक्षरित पूर्णांक मानते हैं)। यह मान्य इनपुट का एक बहुत छोटा सबसेट है। डोमेन केवल a बढ़ता है के रूप में छोटा हो जाता है।

+0

दिलचस्प। मुझे लगता है कि मुझे रॉब लिंडन का जवाब बेहतर लगता है ("पूर्णांक [^ 'ऑपरेशन के तहत पूर्णांक [गणितीय रूप से बंद नहीं होते हैं)", लेकिन आपका उचित है ("पूर्णांक बंद नहीं होते हैं [computationally]'^'ऑपरेशन के तहत") - - लेकिन यह मुश्किल हो जाता है क्योंकि किसी को मशरूम/व्यावहारिक आधार पर निर्णय लेना शुरू करना पड़ता है ... –

0

इसका सरल जोड़ना, घटाना और दो पूर्णांक गुणा करना पूर्णांक में परिणाम। जबकि दशमलव के साथ/बिना दशमलव में एक्सपोनिएशन परिणाम को विभाजित या निष्पादित करते हुए, पूर्णांक के बजाय संख्यात्मक क्यों दिखाया गया।

+0

और यही स्वीकार्य उत्तर पहले से ही कहा गया है ... – flodel

0

क्या यह संभव है a^bexp(b * log(a)) जैसे कुछ के रूप में लागू किया गया था?

+1

सबूत के बिना, इस तरह की टिप्पणी एक टिप्पणी आईएमओ के रूप में सबसे अच्छी तरह से छोड़ी गई है। –

+0

विचित्र रूप से पर्याप्त :-) यह थोड़ी देर पहले मेरी टिप्पणी थी। मुझे अधिक सक्रिय होना चाहिए और आधार स्रोत कोड पर चोटी जाना चाहिए। –

संबंधित मुद्दे