काय आहे काय? · bei.pm
या श्रेणीत फायलींच्या स्वरूपांबद्दल आणि रिव्हर्स इंजिनिअरिंगबद्दल लेख आहेत.
पण आता असं आहे:
बाहेर अनेक प्रोग्रामिंग भाषा आहेत आणि अनेक लोक काही गोष्टींना पूर्णपणे भिन्न नावांनी ओळखतात - किंवा तर मूलभूत गोष्टींच्या अस्तित्वाबद्दल काहीही माहिती नसते, कारण त्यांची प्रोग्रामिंग भाषा त्यांना त्या गोष्टींपासून दूर नेते.
tl;dr:
माझी नोटेशन C99 <stdint.h>
च्या आधारावर आहे. जो कोणी या नोटेशनचा वापर करू शकतो, तो नक्कीच माझ्या नोटेशनमध्ये सहजतेने काम करेल.
पूर्णांक
इंटेजर म्हणजे साध्या भाषेत संपूर्ण संख्या, म्हणजेच दशांशांशांश न असलेल्या संख्या.
इंटेजर सामान्यतः एका निश्चित संख्यात्मक श्रेणीत, म्हणजेच एका निश्चित परिमाणात, डेटा स्वरूपात परिभाषित केल्या जातात. हे मी बिटमध्ये देतो - कारण "बाइट" आणि त्यावर आधारित प्रकार (वर्ड, क्यूवर्ड, ...) सामान्यतः प्लॅटफॉर्मवर अवलंबून असतात.
इंटेजर प्रकारांमध्ये प्राकृतिक संख्यां (ℕ, म्हणजेच, चिन्हाशिवाय - अनसाइन्ड) आणि संपूर्ण संख्यां (ℤ, म्हणजेच, चिन्हासह - साइन्ड) यामध्येही फरक केला जातो.
ही माहिती एक चिन्ह (u
किंवा s
) द्वारे दर्शविली जाते.
चिन्ह असलेल्या संपूर्ण संख्यांना एकात्मक पूरक म्हणून दर्शवले जाऊ शकते किंवा द्विअर्थक पूरक म्हणून.
तसेच, अन्यथा सांगितले नाही तर, द्विअर्थक पूरक वापरला जातो, कारण हा आधुनिक संगणक शास्त्रात पसंतीचा स्वरूप आहे.
चिन्हाशिवाय संख्या मी माझ्या दस्तऐवजांमध्ये uint
म्हणून दर्शवितो, त्यानंतर बिट्स मध्ये अचूकतेचा उल्लेख करतो.
चिन्हासहित संख्या मी माझ्या दस्तऐवजांमध्ये sint
म्हणून दर्शवितो, तसेच त्यानंतर बिट्स मध्ये अचूकतेचा उल्लेख करतो.
मी "चार" डेटा प्रकाराचा वापर नाकारतो कारण वर्ण साखळ्या सामान्यतः फक्त इंटेजर मूल्यांची साखळी असते ज्यामध्ये विशेष अर्थ असतो.
त्यामुळे त्यांना uint(8)[] म्हणून दर्शवले जाते.
उदाहरणे:
नोटेशन | C99 stdint.h -समान |
वर्णन | संख्यात्मक क्षेत्र |
---|---|---|---|
uint(16) | uint16_t | असाइन केलेला पूर्णांक, 16 बिट लांबी | 0 - 65,535 |
sint(8) | int8_t | साइन केलेला पूर्णांक, 8 बिट लांबी, द्विघात परिपूर्णता | -126 - 127 |
uint(24) | uint32_t:24 | असाइन केलेला पूर्णांक, 24 बिट लांबी | 0 - 16,777,216 |
फेस्टकॉम्मा-मूल्ये
फिक्स्ड-पॉइंट मूल्य म्हणजेच अशी संख्यात्मक मूल्ये जी गणनात्मक संख्यां (Q) च्या स्पेक्ट्रममधील आहेत, ज्यात अंक आणि दशांश स्थान असतात.
फिक्स्ड-पॉइंट मूल्यात - त्यामुळेच नाव - अंकाचा स्थान डेटा प्रकाराद्वारे निश्चितपणे दिलेला असतो.
यामुळे या डेटा प्रकारासाठी एक निश्चित संख्या श्रेणी निर्माण होते; गणितीय दृष्ट्या विचारल्यास, संख्यांचे क्षेत्र मर्यादित आहे.
वास्तवात, हा डेटा प्रकार मुख्यतः अशा प्लॅटफॉर्मवर वापरला जातो जिथे जलद फ्लोटिंग-पॉइंट हार्डवेअर युनिट नाही, कारण फिक्स्ड-पॉइंट मूल्यांची गणना पूर्णांक युनिटद्वारे केली जाऊ शकते.
डेटाबेस व्यवस्थापन प्रणालींमध्ये या डेटा प्रकाराचा वापर केला जातो, जेव्हा निश्चित आवश्यकता पूर्ण करणे आवश्यक असते.
यामध्ये, वित्तीय डेटाचे कायमचे संचयन करणाऱ्या प्रणालींचा विचार करा; बहुतेक चलन 2 दशांश स्थानांपर्यंत मर्यादित आहे.
(यासाठी फिक्स्ड-पॉइंट मूल्ये वापरणे चांगले नाही; याऐवजी थेट लघुत्तम चलन युनिट पूर्णांक म्हणून साठवणे आणि उर्वरित दर्शविण्याच्या पातळीवर सोडणे चांगले आहे)
पूर्णांकाच्या निर्दिष्ट मूल्यांच्या समकक्ष, फिक्स्ड-पॉइंट मूल्यांसाठी मी अंकाची आधी आणि नंतरची अचूकता दर्शवतो:
ufixed(9,7)
हा एक डेटा प्रकार दर्शवितो, जो 9 बिट चा चिन्ह नसलेला मूल्य अंकाच्या आधी आणि 7 बिट चा मूल्य अंकाच्या नंतर राखतो; एकूण 16 बिट रुंदीची आहे आणि म्हणून उदाहरणार्थ दोन स्वतंत्र पूर्णांकांचे वेक्टर म्हणून (0,0) ते (511,127) पर्यंतची श्रेणी दर्शवू शकतो.
परंतु या व्याख्येमुळे 28 अंक अनियोजित राहतील, कारण खरेदीमध्ये प्रायोगिक दृष्ट्या (511,99) पर्यंत मर्यादित राहण्याची शक्यता आहे.
फिक्स्ड-पॉइंट मूल्याचा सिध्दांत म्हणून 2 स्वतंत्र पूर्णांकांचे वेक्टर म्हणून विचारण्याऐवजी - ज्यामुळे नेहमीच दशांश संख्यांमध्ये रूपांतरण करताना अनियोजित डेटा क्षेत्र असते आणि एक मॅन्युअल ओव्हरफ्लो होतो - दशांश क्षेत्रास त्यांच्या एकूण अचूकतेच्या भाग म्हणून विचारले जाऊ शकते.
उदाहरणार्थ, ufixed(9,7)
च्या बाबतीत, 27 च्या न denominater च्या एक भाग मिळतो - संख्या क्षेत्र 0,00 ते 511 + 126⁄127 पर्यंत जाते.
दशांश रूपांतरणाच्या प्रक्रियेसाठी, दशांश स्थान 128 ने विभाजित केले जाईल.
या प्रकारामुळे गणितीय ऑपरेशन्स अधिक सुलभपणे करता येतात, कारण ओव्हरफ्लो आपोआप निर्माण होतो, ज्यामुळे हा प्रकार सामान्यतः प्राधान्य दिला जातो.
यामध्ये एक दोष आहे की, दशांश रूपांतरणामध्ये दशांश स्थानांची अचूकता अधिक गहाळ होते, एकच दशांश स्थान तर गुणात्मक मूल्य 0.01
ऐवजी 0.007874
असेल, ज्यामुळे संबंधित राउंडिंग त्रुटी निर्माण होऊ शकतात.
कोणतीही व्याख्या वापरली जाते, ती संबंधित वापर स्थळी दस्तऐवजीकरण केली जाते.
फ्लोटिंग पॉइंट किंवा गडद पॉइंट मूल्ये
फ्लोटिंग पॉइंट मूल्य हे गणितीयदृष्ट्या अधिक जटिल अभिव्यक्ती आहेत, ज्यामध्ये एक ठराविक ठराव असलेली पूर्णांक एक गणितीय अटीद्वारे व्यक्त केली जाते, ज्यामुळे प्रभावीपणे दशांश भाग स्थानांतर करून तयार केला जातो - आणि त्यामुळे थेट विज्ञानात्मक संकेतन वर आधारित असतो.
याचे सर्वात सामान्य अंमलबजावणी IEEE 754 च्या माध्यमातून मानकीकरण केले गेले आहे आणि त्यानंतर हे आंतरराष्ट्रीय पातळीवर मान्य करण्यात आले आहे.
यामध्ये एक फ्लोटिंग पॉइंट मूल्य सामान्यतः खालील घटकांपासून बनलेले असते:
चिह्न (0 किंवा 1 ) |
उच्चांक | मॅन्टिसा |
चिह्न हे द्विआधारी होय/नाही माहिती म्हणून सोप्या पद्धतीने मिळवले जाऊ शकते, खरी संख्या पुढील समीकरणाद्वारे तयार होते
मॅन्टिसा * 2उच्चांक
याशिवाय, काही स्थिर मूल्ये आहेत, जे विशेष प्रकरणे तार्किक संख्यांचे कव्हर करतात - त्यामध्ये ±∞
आणि NaN
("वैध संख्या नाही").
फ्लोटिंग पॉइंट मूल्ये मुख्यत्वे तेव्हा उपयोगी असतात, जेव्हा सटीकता इतकी महत्वाची नसते, कारण या प्रकारच्या मूल्यांमध्ये अपरिहार्यपणे गोलाईची चूक आणि त्यामुळे सटीकतेचा नुकसान होतो. सामान्यतः, फ्लोटिंग पॉइंट मूल्यांचे उपयोग उदाहरणार्थ 3D मॉडेल्समधील वर्टेक्स वेक्टर किंवा ऑप्टिकल प्रतिनिधित्वासाठी बेझियर / स्प्लाइन वक्रांच्या समन्वयांच्या व्याख्येसाठी केला जातो.
डेटा स्वरूपांमध्ये फ्लोटिंग पॉइंट मूल्ये float(मॅन्टिसा, उच्चांक)
म्हणून निर्दिष्ट केली जातात.
जर IEEE 754 पासून वेगळा स्वरूप वापरण्यात आला, तर तो संबंधितपणे दिला जातो.