શું શું છે? · bei.pm

આ ટેક્સ્ટને ઓટોમેટિક રીંગની મદદથી OpenAI GPT-4o Mini દ્વારા અનુવાદિત કરવામાં આવ્યો છે

આ વિભાગમાં ડેટા ફોર્મેટ અને રિવર્સ એન્જિનિયરિંગ અંગેના લેખો છે.

હવે એવું છે:
તેવા ઘણા પ્રોગ્રામિંગ ભાષાઓ અને ઘણા લોકો છે, જે કેટલીક વસ્તુઓને સંપૂર્ણપણે ભિન્ન નામો હેઠળ ઓળખે છે - અથવા તો તેમને મૂળભૂત વસ્તુઓના અસ્તિત્વ વિશે કોઈ જાણ નથી, કારણ કે તેમની પ્રોગ્રામિંગ ભાષા એને તેમની સામેથી દૂર કરેલી છે.

tl;dr:
મારી નોટેશન મોટેભાગે C99 <stdint.h> પર આધારિત છે. જે કોઈ આ નોટેશન સાથે ઓળખાણ ધરાવે છે, તે મારી નોટેશનને સરળતાથી સમજી જશે.

પૂર્ણાંક

Integer એટલે સીધી રીતે સમજાય તે રીતે પૂર્ણાંક, એટલે કે દશાંશ ભાગ વિના સંખ્યાઓ.

ઈન્ટેજર ડેટા ફોર્મેટ્સમાં સામાન્ય રીતે નિશ્ચિત સંખ્યાના વિસ્તાર, એક આકૃતિમાં, વ્યાખ્યાયિત કરવામાં આવે છે. આ હું બિટમાં બતાવું છું - કારણ કે "બાઇટ" અને તેના આધારિત પ્રકારો (વર્ડ, ક્યૂવોર્ડ, ...) સામાન્ય રીતે પ્લેટફોર્મ પર આધારિત હોય છે.

અત્રે ઈન્ટેજર પ્રકારોમાં પ્રાકૃતિક સંખ્યાઓ (ℕ, એટલે કે, નિઃસંકેતી - Unsigned) અને પૂર્ણ સંખ્યાઓ (ℤ, એટલે કે, સંકેત સાથે - Signed) વચ્ચે ભેદ કરવામાં આવે છે.
આ માહિતી એક સંકેત સાથે ઓળખકર્તામાં (u અથવા s) દેખાઈ છે.

જ્યાં સુધી આ રીતે સૂચિત ન હોય, સંકેતી પૂર્ણાંક અથવા તો એકટકમ્બેલ અથવા બીજાકટકમ્બેલ તરીકે રજૂ કરવામાં આવી શકે છે.
જ્યારે સુધી બીજું ન કહેવામાં આવે, ત્યારે બીજાકટકમ્બેલનો ઉપયોગ થાય છે, કારણ કે આ આધુનિક માહિતીમાં પસંદગીની રજૂઆત છે.

મને મારી દસ્તાવેજોમાં સંકેત વિના સંખ્યાઓને uint તરીકે દર્શાવવામાં આવે છે, ત્યારબાદ Bitsમાં ચોકસાઈ દર્શાવવામાં આવે છે.
સંકેત સાથે સંખ્યાઓને મારાં દસ્તાવેજોમાં sint તરીકે દર્શાવવામાં આવે છે, તેમજ Bitsમાં ચોકસાઈ દર્શાવવામાં આવે છે.

હું અક્ષરો માટે "char" ડેટા પ્રકારના ઉપયોગમાંથી બચું છું, કારણ કે અક્ષર શ્રેણીઓ સામાન્ય રીતે માત્ર વિશિષ્ટ અર્થ વિના પૂર્ણાંક મૂલ્ય શ્રેણીઓ તરીકે રજૂ થાય છે.
આને તેથી 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) ની શ્રેણીમાંથી આવે છે, જે કોમા અને અનુકોમાના સ્થાન ધરાવે છે.

ફિક્સ્ડ પોઇન્ટ મૂલ્યોમાં - તેથી નામથી - કોમાનો સ્થાન ડેટા પ્રકાર દ્વારા નિશ્ચિત કરવામાં આવ્યું છે.
આથી, આ ડેટા પ્રકાર માટે સંખ્યાઓનો એક નિશ્ચિત વિસ્તાર પ્રાપ્ત થાય છે; ગણિતીય રીતે, આ સંખ્યાઓનો વિસ્તાર સમાપ્તિ છે.

Vવાસ્તવમાં, આ ડેટા પ્રકાર ખાસ કરીને એવા પ્લેટફોર્મ્સ પર ઉપયોગમાં લેવાય છે જ્યાં પૂરતા ઝડપી ફ્લોટેંગ પોઇન્ટ હાર્ડવેર એકમ નથી, કારણ કે ફિક્સ્ડ પોઇન્ટ મૂલ્યોની ગણતરી પૂર્ણાંક એકમો દ્વારા કરવામાં આવી શકે છે.

આ ડેટા પ્રકાર, ઉદાહરણ તરીકે, ડેટાબેસ મેનેજમેન્ટ સિસ્ટમ્સ દ્વારા ઉપયોગમાં લેવાય છે, જ્યારે નિશ્ચિત આવશ્યકતાઓ પૂરી કરવામાં આવવા જોઈએ.
આમાં, ઉદાહરણ તરીકે, નાણાકીય ડેટા માટેના સ્થાયી ભંડારણ સિસ્ટમોના વિષયમાં વિચારવું; વધુ પડતા નાણાં 2 કોબા એ સ્થળો સુધી જ સીમિત હોય છે. (પણ, અહીં ફિક્સ્ડ પોઇન્ટ મૂલ્યો લેવું બુદ્ધિપૂર્ણ નથી; તેના બદલે, સચોટ રીતે નાની નાણાકીય એકમ ને પૂર્ણાંક તરીકે સંગ્રહિત કરવું વધુ સારું છે અને બાકીની દર્શન-સ્તર છોડી દેવું.)

પૂર્ણાંકની સૂચનાઓની સમાન રીતે, ફિક્સ્ડ પોઇન્ટ મૂલ્યોમાં હું સંખ્યાનું નિરીક્ષણ પૂર્વ અને પછી કોમાના સ્થાનને દર્શાવું છું:
ufixed(9,7) એ એક ડેટા પ્રકાર દર્શાવે છે, જે નિશ્ચિત 9 બિટ કોમાના પહેલાંના મૂલ્ય માટે અને 7 બિટ કોમાના પછીના મૂલ્ય માટે ફાળવવામાં આવ્યું છે; આથી, કુલ 16 બિટ પહોળાઈ છે અને તે, ઉદાહરણ તરીકે, બે એકબીજા પર આધારિત પૂર્ણાંક તરીકે (0,0) થી (511,127) નું વિસ્તાર આવરી શકે છે.
પરંતુ, આ વ્યાખ્યા તેના દશમલવ પ્રતિનિધિતામાં 28 સંખ્યાઓને બિનઉપયોગી બનાવે છે, કારણ કે વ્યાવસાયિક રીતે વધુમાં વધુ (511,99) સુધી સીમિત થવાની શક્યતા છે.

ફિક્સ્ડ પોઇન્ટ મૂલ્યને 2 અલગ પૂર્ણાંકના વેક્ટર તરીકે સિધા અર્થમાં વ્યાખ્યાયિત કરવા બદલે - જે દશમલવ સંખ્યામાં પરિવર્તન કરતી વખતે લગભગ હંમેશા બિનઉપયોગી ડેટા વિસ્તાર દર્શાવે છે અને મેન્યુઅલ ટ્રાન્સફરનો અર્થ થાય છે - તેના બદલે અનુકોમાના વિસ્તારને તેના કુલ નિરીક્ષણના ભાગ તરીકે વ્યાખ્યાયિત કરી શકાય છે.
જેમ કે ઉદાહરણમાં ઉલ્લેખ કરવામાં આવેલ ufixed(9,7) માં, એક denominatore 27 ની ઊંચાઈમાં ભાગ આપે છે - સંખ્યાનો વિસ્તાર હવે 0,00 થી 511 + 126127 સુધી છે. દશમલવ પ્રતિનિધિતામાં ફેરવવા માટે, તેથી અનુકોમાના સ્થાનને 128 થી વહેંચવું પડશે.
આ પદ્ધતિનો ઉપયોગ કરીને ગણતરીઓ સરળતાથી કરી શકાય છે, કારણ કે ટ્રાન્સફર આપોઆપ થાય છે, જેના કારણે આ પદ્ધતિ સામાન્ય રીતે પ્રાથમિકતા પ્રાપ્ત કરે છે.
પરંતુ, આ પદ્ધતિમાં એક દુષ્પ્રભાવ છે, એટલે કે દશમલવ પ્રતિનિધિતામાં અનુકોમાના સ્થાનો પહેલાનું નક્કી કરેલ નિરીક્ષણ નથી, તેથી એક દશમલવ સ્થાન હવે 0.01 ના સમકક્ષ નથી, પરંતુ 0.007874 છે, જે સંબંધિત રાઉન્ડિંગ ભૂલોમાં દોરી જઈ શકે છે.

કઈ વ્યાખ્યાની પદ્ધતિનો ઉપયોગ થાય છે તે તેનું દસ્તાવેજીકરણ કરવામાં આવે છે.

ફ્લોઇંગ પોઇન્ટ અથવા ગ્લાઈડિંગ પોઇન્ટ મૂલ્યો

ફ્લોટેંગ-પોઈન્ટ મૂલ્યો ગણિતીય રીતે વધુ જટિલ અભિવ્યક્તિઓ છે, જ્યાં એક સંપૂર્ણ આંક ડિફાઈન કરેલી સમાધાન દ્વારા એક ગણિતીય શબ્દમાં આ રીતે વ્યક્ત કરવામાં આવે છે કે અસરકારક રીતે દશમલવ ભાગને ખસેડવાથી બનાવવામાં આવે છે - અને તે સાથે વિજ્ઞાનિક નોંધણી સાથે સીધું સંકળાય છે.
આને અમલમાં મૂકવાની સૌથી સામાન્ય રીત
IEEE 754 દ્વારા માનક બનાવવામાં આવી છે અને ત્યારથી આંતરરાષ્ટ્રીય માન્યતામાં છે.

ફ્લોટેંગ-પોઈન્ટ મૂલ્ય સામાન્ય રીતે નીચેના ઘટકોમાંથી બનેલું છે:

ચિહ્ન (0 અથવા 1) વેજ મેન્ટિસ

જ્યારે ચિહ્ન બાયનરી હા/ના જાણકારીને સરળતાથી શોધી શકાય છે, ત્યારે સાચી સંખ્યા સમીકરણ દ્વારા બને છે
મેન્ટિસ * 2વેજ

વધુમાં, કેટલીક સ્થિર મૂલ્યોની શ્રેણી છે, જે ખાસ કેસ ન્યાયિક સંખ્યાઓને આવરી લે છે - જેમાં ±∞ અને NaN ("કોઈ માન્ય સંખ્યા નથી").

ફ્લોટેંગ-પોઈન્ટ મૂલ્યો મુખ્યત્વે ત્યારે ઉપયોગી હોય છે જયારે સચોટતા એટલી મહત્વની નથી, કારણ કે આ પ્રકારની મૂલ્યોમાં સ્વાભાવિક રીતે ગોળાઈની ભૂલો અને તેથી સચોટતા ગુમાવવાની શક્યતા હોય છે. સામાન્ય રીતે, ફ્લોટેંગ-પોઈન્ટ મૂલ્યો ઉદાહરણ તરીકેkoordinationની વ્યાખ્યામાં, જેમ કે 3D મોડેલોમાં વર્ટેક્સ વેક્ટરો અથવા દ્રષ્ટિ પ્રતિનિધિ હેતુઓ માટે બેઝિયર/સ્પ્લાઇન વક્રોમાં ઉપયોગ થાય છે.

ડેટા ફોર્મેટમાં, ફ્લોટેંગ-પોઈન્ટ મૂલ્યોને float(મેન્ટિસ, વેજ) તરીકે સ્પષ્ટ કરવામાં આવે છે.
જો IEEE 754 થી અલગ ફોર્મેટનો ઉપયોગ કરવામાં આવે છે, તો તે પ્રમાણે દર્શાવવામાં આવે છે.