Int और Integer में क्या अंतर है?


169

हास्केल में, एक के बीच अंतर क्या है Intऔर एकInteger ? उत्तर कहां प्रलेखित है?

जवाबों:


183

"इंटेगर" एक मनमाना सटीक प्रकार है: यह किसी भी संख्या को चाहे कितनी भी बड़ी हो, आपकी मशीन की मेमोरी की सीमा तक ... इसका मतलब है कि आपके पास कभी भी अंकगणित नहीं होगा। दूसरी ओर इसका अर्थ यह भी है कि आपका अंकगणित अपेक्षाकृत धीमा है। लिस्प उपयोगकर्ता "bignum" प्रकार को यहां पहचान सकते हैं।

"इंट" अधिक सामान्य 32 या 64 बिट पूर्णांक है। कार्यान्वयन अलग-अलग होते हैं, हालांकि यह कम से कम 30 बिट होने की गारंटी है।

स्रोत: हास्केल Wikibook । इसके अलावा, आप हास्केल के लिए ए जेंटल इंट्रोडक्शन के नंबर सेक्शन को उपयोगी पा सकते हैं।


इस उत्तर के अनुसार , उपयोग Integerकरना अक्सर तेज होता है
Maarten

6
@Maarten, केवल इसलिए कि Int6432-बिट सिस्टम पर बुरी तरह लागू किया गया है। 64-बिट सिस्टम पर, यह बहुत अच्छा है।
dfeuer

21

Intहै Bounded, जिसका अर्थ है कि आप उपयोग कर सकते हैं minBoundऔर maxBoundसीमा है, जो कम से कम कार्यान्वयन पर निर्भर है, लेकिन पकड़ करने की गारंटी कर रहे हैं पता लगाने के लिए [-2 29 .. 2 29 -1]।

उदाहरण के लिए:

Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)

हालांकि, Integerमनमाना परिशुद्धता है, और नहीं Bounded

Prelude> (minBound, maxBound) :: (Integer, Integer)

<interactive>:3:2:
    No instance for (Bounded Integer) arising from a use of `minBound'
    Possible fix: add an instance declaration for (Bounded Integer)
    In the expression: minBound
    In the expression: (minBound, maxBound) :: (Integer, Integer)
    In an equation for `it':
        it = (minBound, maxBound) :: (Integer, Integer)


10

Int, C int है, जिसका अर्थ है कि इसका मान -2147483647 से 2147483647 तक है, जबकि पूरे Z सेट से एक इंटेगर रेंज , इसका मतलब है कि यह मनमाने ढंग से बड़ा हो सकता है।

$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)

इंट शाब्दिक के मूल्य पर ध्यान दें।


2
GHCi, संस्करण 7.10.3 चेतावनी देता है: लिटरल 12345678901234567890 Int -9223372036854775808..9223372036854775807 से बाहर है
एडम

5

प्रस्तावना केवल सबसे बुनियादी संख्यात्मक प्रकारों को परिभाषित करता है: निश्चित आकार के पूर्णांक (इंट), मनमाने ढंग से सटीक पूर्णांक (पूर्णांक), ...

...

परिमित-सटीक पूर्णांक प्रकार Int कम से कम रेंज [- 2 ^ 29, 2 ^ 29 - 1] को कवर करता है।

हास्केल रिपोर्ट से: http://www.haskell.org/onlinereport/basic.html#numbers


4

एक Integerएक के रूप में कार्यान्वित किया जाता है Int#जब तक यह अधिकतम मूल्य एक से भी बड़ा हो जाता है Int#स्टोर कर सकते हैं। उस समय, यह एक GMP नंबर है।


2
यह विशिष्ट कार्यान्वयन लगता है। क्या कोई संदर्भ यह कह रहा है कि इंटेगर को इस तरह से लागू करने की आवश्यकता है?
yoniLavi

4
नहीं, आप सही हैं, यह जीएचसी विशिष्ट है। उस ने कहा, 1. जीएचसी वह है जो अधिकांश लोग उपयोग करते हैं, 2. यह सबसे बुद्धिमान तरीका है जो मैं इस तरह के डेटा प्रकार को लागू करने के बारे में सोच सकता हूं।
नैट सीमर

क्या इसका मतलब यह है कि (जीएचसी में) उपयोग करने के लिए कोई प्रदर्शन व्यापार नहीं है Integer, और इसलिए Integerहमेशा बेहतर विकल्प होता है?
कर्क ब्रॉडहर्स्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.