என்னது என்ன? · bei.pm
இந்த பிரிவில் கோப்பு வடிவங்கள் மற்றும் ரிவர்ஸ் என்ஜினியரிங்க் பற்றிய கட்டுரைகள் உள்ளன.
ஆனால் இப்போது நிலவரம் இப்படி உள்ளது:
அங்கே பல நிரலாக்க மொழிகள் உள்ளன மற்றும் பலர் சில விஷயங்களை முற்றிலும் வெவ்வேறு பெயர்களில் அறிந்திருக்கிறார்கள் - அல்லது அடிப்படையான விஷயங்களின் இருப்பிற்கும் புரிதல் இல்லாமல் இருக்கிறார்கள், ஏனெனில் அவர்களது நிரலாக்க மொழி அதை அவர்களிடமிருந்து அயலாக்குகிறது.
tl;dr:
என் குறியீடு C99 <stdint.h>
இற்கு அடிப்படையாக உள்ளது. இந்த குறியீடுடன் யாருக்கு தெரியும், அவர்களுக்கு என் குறியீடு நிச்சயமாக புரியும்.
முழு எண்
இணையக்கணி என்பது எளிமையாகச் சொல்லப்படுத்தப்பட்ட முழு எண்களாகும், அதாவது பத்து எண் பங்கு இல்லாத எண்கள்.
இதில், இணைக்கணி பொதுவாக ஒரு நிலையான எண் வரம்பில், குறித்த ஒரு தீர்வில், தரவுப் படிவங்களில் வரையறுக்கப்பட்டுள்ளது. இதை நான் பிட்டுகளில் வழங்குகிறேன் - "பைட்" மற்றும் அதற்குப் பிறகு வரும் வகைகள் (வேர்ட், க்யூவேர்ட், ...) பொதுவாக தளத்திற்கு சார்ந்தவையாகவே இருக்கும்.
மேலும் இணைக்கணி வகைகளில் இயற்கை எண்கள் (ℕ, अर्थात्, குறியீடு இல்லாமல் - Unsigned) மற்றும் முழு எண்கள் (ℤ, अर्थात्, குறியீடு உடைய - Signed) என்பவற்றுக்குமான வேறுபாடுகள் உள்ளன.
இந்த தகவல் குறியீட்டில் (u
அல்லது s
) ஒரு குறியீடு மூலம் தெரிகிறது.
இங்கு, குறியீடு உடையான முழு எண்களை ஒருங்கிணைப்பு அல்லது இரண்டு ஒருங்கிணைப்பு ஆகக் காணலாம்.
மற்றெங்கு குறிப்பிடப்படாவிட்டால், இரண்டு ஒருங்கிணைப்பு பயன்படுத்தப்படுகிறது, ஏனெனில் இது நவீன கணினி அறிவியலில் விரும்பத்தக்க பிரதிநிதியாகும்.
குறியீடு இல்லாத எண்களை நான் என் ஆவணங்களில் uint
எனக் குறிப்பிடுகிறேன், பின்னர் பிட்டுகளில் துல்லியத்தைக் குறிப்பிடுகிறேன்.
குறியீடு உடைய எண்களை நான் என் ஆவணங்களில் sint
எனக் குறிப்பிடுகிறேன், அதுவும் பின்னர் பிட்டுகளில் துல்லியத்தைக் குறிப்பிடுகிறேன்.
எனக்கு எழுத்துக்களுக்கான "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) பரப்பில் உள்ள எண் மதிப்புகள் ஆகும், இதனால் இவை கோமா மற்றும் பின்பக்கம் உள்ளன.
நிலையான புள்ளி மதிப்புகளில், - எனவே பெயர் மூலம் - கோமாவின் இடம் தரவுத்தரவுகளால் முன்னிருப்பாக நிச்சயிக்கப்பட்டுள்ளது.
இதனால், இந்த தரவுத்தரவின் எண் மதிப்புகளுக்கு ஒரு நிலையான எண் வரம்பும் உருவாகிறது; கணித ரீதியாக, எண் இடம் இறுதியாக உள்ளது.
வாழ்க்கையில், இந்த தரவுத்தரம் பெரும்பாலும் தீவிரமான நிதி கணக்கீட்டு சாதனங்கள் இல்லாத மேடைகளில் பயன்படுத்தப்படுகிறது, ஏனெனில் நிலையான புள்ளி மதிப்புகளின் கணக்கீடு முழுமையான தரவுத்தரவுகளால் செய்யலாம்.
இதை தவிர, தரவுத்தரவை நிலையான தேவைகள் நிறைவேற்றப்பட வேண்டிய போது தரவுத்தளம் மேலாண்மை அமைப்புகளால் பயன்படுத்தப்படுகிறது.
எல்லா நிதி தரவுகளை நிரந்தரமாக சேமிக்க உதவும் அமைப்புகளை நினைவில் கொண்டால்; பெரும்பாலான நாணயங்கள் கோமா பின்புறம் 2 இடங்களுக்குள் தடைசெய்யப்படுகின்றன.
(இதற்கு நிலையான புள்ளி மதிப்புகளை எடுத்துக்கொள்வது புத்திசாலித்தனமாக இல்லை; தேவையான அளவு சிறிய நாணய அலகு ஐ முழுமையான எண் வடிவத்தில் சேமித்து, மீதியை காட்சியின் அடிப்படியை விட்டுவிடுவது சிறந்தது)
முழுமையான எண்ணீட்டுகளில், நான் நிலையான புள்ளி மதிப்புகளில் கோமா முன்பும் பின்னும் எண் தீர்வுகளை குறிப்பிடுகிறேன்:
ufixed(9,7)
என்பது 9 பிட்டுகளை கோமா முன் மதிப்பிற்காக, 7 பிட்டுகளை கோமா பின்புற மதிப்பிற்காக ஒதுக்கப்பட்டுள்ளது; மொத்தத்தில் 16 பிட்டுகள் அகலமாக உள்ளது, மற்றும் இது (0,0) முதல் (511,127) வரை உள்ள ஒரு வரம்பை அடையாளம் காணலாம்.
இந்த விளக்கம், இருப்பினும், இதன் புள்ளியியல் காட்சியில் 28 எண்களை பயன்படுத்தாமல் தீவிரமாக்கும், ஏனெனில் செயலில் அதிகபட்சமாக (511,99) க்குள் மட்டுமே வரம்பு வகுப்பில் இருக்கும்.
நிலையான புள்ளி மதிப்புகளை 2 தனித்தோகைகளின் வெக்டராக தொகுதியாக நேரடியாக விளக்குவதற்கு பதிலாக - இது கடுமையாகவே புள்ளியியல் எண்களில் மாற்றம் செய்யும் போது unused data area ஐ ஏற்படுத்தும் - பின்பக்கம் பகுதியாக பாகம் அவர்களின் முழுமையான தீர்வாகவும் விளக்கப்படலாம்.
மேற்கண்ட ufixed(9,7)
இன் உதாரணத்தில், 27 உயரமான denominator இல் ஒரு பாகம் உருவாகிறது - எண் வரம்பு 0.00 முதல் 511 + 126⁄127 வரை செல்லும்.
ஒரு புள்ளியியல் காட்சியில் மாற்றுவதற்கு பின்பக்கம் 128 இல் வகுக்கப்படும்.
இந்த வகையால் கணக்கீட்டு செயல்பாடுகளை எளிதாக செய்யலாம், ஏனெனில் மேலெழுதுதல் தானாகவே உருவாகுகிறது, இதனால் இந்த வகை பொதுவாக விரும்பப்படுகிறது.
இந்த வகைக்கு பின்வரும் குறைபாடுகள் உள்ளன, புள்ளியியல் காட்சியில் பின்பக்கம் எண்கள் மேலும் உறுதியான தீர்வுகளைப் பெற மாட்டாது, ஒரு தனிப்பட்ட புள்ளியியல் எண் 0.01
யின் மதிப்பு அல்ல, ஆனால் 0.007874
ஆக இருக்கும், இது இதற்கான சுற்று பிழைகளை உருவாக்கும்.
எந்த விளக்கக் காட்சியினை பயன்படுத்துவது, பயன்படுத்தும் இடத்தில் பதிவு செய்யப்படும்.
ஃபிளோடிங் பாயிண்ட் அல்லது கிளைடிங் பாயிண்ட் மதிப்புகள்
ஃப்ளோட்டிங்-பாயின்ட் மதிப்புகள் என்பது கணிதம் அடிப்படையிலான சிக்கலான வெளிப்பாடுகள் ஆகும், இதில் ஒரு முழு எண் நிரந்தர தீர்வுடன் ஒரு கணிதச் சொற்றொடரின் மூலம் வெளிப்படுத்தப்படுகிறது, அதில் எளிதாக பின் புள்ளி பாகம் மாற்றம் மூலம் உருவாகிறது - மற்றும் அறிவியல் குறிப்புகளை அடிப்படையாகக் கொண்டு அமைந்துள்ளது.
இதனை செயல்படுத்துவதற்கான பொதுவான வழி
IEEE 754 மூலம் தரநிலைப்படுத்தப்பட்டது மற்றும் அதன்பிறகு உலகளாவியமாக அங்கீகாரம் பெற்றது.
ஃப்ளோட்டிங்-பாயின்ட் மதிப்பு பொதுவாக கீழ்காணும் கூறுகளை கொண்டுள்ளது:
குறியீடு (0 அல்லது 1 ) |
எExponent | மாந்திஸ் |
குறியீடு பைனரியாக ஆம்/இல்லை தகவலாக எளிதாக இதழாக்கப்படுகிறது, எActual எண் சமவெளியில் உருவாகிறது
மாந்திஸ் * 2எExponent
மேலும், பதிவுசெய்யப்பட்ட மதிப்புக்களின் ஒரு வரிசை உள்ளது, இது சில சிறப்பு உத்திசெய்யப்பட்ட எண்கள் - இவற்றின் அடிப்படையில் ±∞
மற்றும் NaN
("சரியான எண் இல்லை") உள்ளன.
ஃப்ளோட்டிங்-பாயின்ட் மதிப்புகள் குறிப்பாக துல்லியம் மிகவும் முக்கியம் இல்லாத போது பயனுள்ளதாக இருக்கும், ஏனெனில் இந்த வகை மதிப்புகளில் தவறான எண்ணிக்கை மற்றும் அதற்கான துல்லீய இழப்புகள் ஏற்படும். சாதாரணமாக, ஃப்ளோட்டிங்-பாயின்ட் மதிப்புகள், உதாரணமாக 3D மாதிரிகளில் உச்ச வெக்டர்கள் அல்லது ஒளி பிரதிநிதித்துவத்திற்கான Bézier-/Spline-வளைவுகளை வரையறுப்பதற்காக பயன்படுகின்றன.
தரதளங்களில் ஃப்ளோட்டிங்-பாயின்ட் மதிப்புகள் float(மாந்திஸ், எExponent)
என்று குறிப்பிடப்படுகிறது.
IEEE 754-க்கு மாறுபட்ட வடிவம் பயன்படுத்தப்பட்டால், அது accordingly குறிப்பிடப்படுகிறது.