2017-01-04 9 views
12

कुछ गणित कार्य हैं जो एस्ट्रोफ़े के साथ समाप्त होते हैं जैसे: +', *', और -'क्लोजर में एस्ट्रोफ़े के साथ उन गणित कार्यों का क्या अंत होता है?

गैर-एस्ट्रोफ़े और एस्ट्रोफ़े के बीच क्या अंतर है?

उत्तर

17

वे सामान्य गणित कार्यों के "ऑटो-प्रोन्नति" संस्करण हैं।

user> (* Long/MAX_VALUE 2) 
ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow (Numbers.java:1501) 
user> (*' Long/MAX_VALUE 2) 
18446744073709551614N 

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

प्रैक्टिस में, अधिकांश समय आपको पता चलेगा कि आपको BigIntegers और BigDecimals का उपयोग करने की आवश्यकता होगी और इन डेटा प्रकारों के साथ सामान्य कार्यों का उपयोग कर सकते हैं।

user> (* Long/MAX_VALUE 2N) 
18446744073709551614N 

इस उदाहरण में मैं सामान्य * फ़ंक्शन का उपयोग किया है, और यह एक तर्क है कि प्रकार BigInteger का था पारित कर दिया

कुछ मामलों रहे हैं (कि क्या 2N में N clojure-रीडर का मतलब है) जहां आपको वास्तव में आकार के आकार के बिना किसी भी आकार संख्या के साथ काम करने की ज़रूरत है और ये कार्य आसान हो जाते हैं। अब तक मेरे लिए इनमें से अधिकतर उदाहरण स्टैक ओवरफ्लो पर फैक्टोरियल उदाहरण हैं।

user> (unchecked-add Long/MAX_VALUE 2) 
-9223372036854775807 
+3

अनुकरणीय जवाब:

तुम सच में अपने गणित आपरेशन से ऊपर जाने का तो आप स्पष्ट रूप से असुरक्षित गणित कार्यों का उपयोग कर सकते हैं। सटीक और बहुत गहन। – amalloy

+2

पूरा करने के लिए: '* अनचेक-गणित * भी है जिसे 'सत्य' पर सेट किया जा सकता है – ClojureMostly

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