मैं वर्तमान में vellvm के साथ काम कर रहा हूं, इस पर एक परिवर्तन विकसित कर रहा हूं। मैं एक coq नौसिखिया हूँ।मैं कोक नट्स में स्टैक ओवरफ़्लो या सेगमेंटेशन गलती से कैसे बच सकता हूं?
Warning: Stack overflow or segmentation fault happens when working with large numbers in nat (observed threshold may vary from 5000 to 70000 depending on your system limits and on the command executed).
मेरे समारोह है कि उत्पन्न करता है कि यह चेतावनी हस्ताक्षर गणना करता है:
जबकि प्रोग्रामिंग, मैं निम्न चेतावनी का सामना करना पड़ा। हस्ताक्षर बेहतर और निम्न बिट्स में बांटा गया है। दो बिट्स एन 1 और एन 2 को बेहतर बिट्स और अवरक्त बिट्स का प्रतिनिधित्व करते हुए, यह गणना करता है (एन 1 * 65536) + एन 2 - यह 16 बिट्स के साथ-साथ दो बाइनरी संख्याओं को रखने के लिए एक अमूर्त है।
मैं आश्चर्यचकित था क्योंकि एस कन्स्ट्रक्टर के लिए धन्यवाद, कॉक नेट परिभाषा बाहरी से बड़ी चींटियों को संभालने के लिए प्रतीत होती है।
मुझे इस चेतावनी से बचने/कोक में बड़ी संख्याओं का उपयोग कैसे करना चाहिए? मैं नाट से किसी प्रकार के बाइनरी निर्माण में कार्यान्वयन को बदलने के लिए खुला हूं।
धन्यवाद!
नाट्स के साथ काम करना क्रूर है, क्योंकि वे 'एस' के साथ बने हैं, जिसका अर्थ है कि प्रत्येक नंबर * सचमुच * एस 'अनुप्रयोगों का अनुक्रम होगा: आप इसके बजाय पूर्णांक के साथ काम कर सकते हैं, जिसमें समान सबूत सिद्धांत हैं लेकिन उनमें एक है साइन/परिमाण (बिट) आधारित प्रतिनिधित्व: http://coq.inria.fr/library/Coq.ZArith.BinInt.html –
तब मैं ऑपरेशन का उपयोग कैसे कर सकता हूं? (Zpos 1) + (Zpos 2) काम नहीं करता है ... - त्रुटि: "1% Z" शब्द का प्रकार "|" है जबकि यह "नेट" टाइप होने की उम्मीद है। – fotanus
ऐसा इसलिए है क्योंकि "+" का मतलब है कि आप कहां हैं इसके आधार पर कई चीजें हैं। हकीकत में "+" नट्स जोड़ने के लिए सिंटैक्टिक चीनी है, जहां 'प्लस' को दो नटों पर स्ट्रक्चरल रूप से परिभाषित किया जाता है। आप 'प्लस' को पूर्णांक के लिए उपयोग करना चाहते हैं, जो 'nat' (अर्थात्, 'Int_scope') के मुकाबले एक अलग _ व्याख्या व्याख्या क्षेत्र में रहता है। व्याख्या स्कॉप्स और उन्हें कैसे खोलें और उनका उपयोग कैसे करें के बारे में पढ़ें। –