ဘာအကြောင်းလဲ? · bei.pm
ဒီအပိုင်းမှာ အချက်အလက်ဖိုင်ပုံစံများနှင့် ပြန်လည်အင်ဂျင်နီယာလုပ်ဆောင်မှုအကြောင်း အရေးအသားများရှိသည်။
ယခုဆိုရင်:
ပြင်ပမှာ အမျိုးမျိုးသော ပရိုဂရမ်မင်းဘာသာစကားများနှင့် အခြားသော အရာများကို အမည် မတူညီသော နာမည်များဖြင့် သိကြသော လူများများ ရှိနေသည် - သို့မဟုတ် သူတို့၏ ပရိုဂရမ်မင်းဘာသာစကားက အခြေခံအရာများ၏ ရှိမှုကို လွှမ်းခြုံထားသဖြင့် အရာအခြေခံများ၏ ရှိမှုကို သိပ်မသိသော လူများလည်းရှိသည်။
tl;dr:
ငါ့အမှတ်အသားသည် C99 <stdint.h>
အပေါ်အခြေခံ၍ ရှင်းလင်းသည်။ ဤအမှတ်အသားကို အသုံးပြုနိုင်သူများသည် ငါ့အမှတ်အသားကို အဆင်ပြေစွာ အသုံးချနိုင်မည်ဟု ယုံကြည်ပါသည်။
ဂဏန်း
Integer ဆိုတာက ရိုးရိုးပြောရရင် အပြည့်အဝ ဂဏန်းတွေ ဖြစ်ပြီး၊ သင်ကြားလာတဲ့ နောက်ဆုံးအပိုင်းမပါဘူး။
Integer တွေဟာ ဒေတာဖော်မတ်တွေမှာ အများအားဖြင့် တစ်ခါတစ်ရံ သတ်မှတ်ထားတဲ့ ဂဏန်းများအတွင်းရှိပါတယ်၊ အတိအကျဆိုရင် သတ်မှတ်ထားတဲ့ အရည်အသွေးတစ်ခုအတွင်းပါ။ ဤအရာကို ကြိုးတစ်ခုပြီး အချိုးတွင် ဖော်ပြပါမည် - အကြောင်းကတော့ "Byte" နဲ့ အခြားပေါင်းစုံသော အမျိုးအစားများ (Word, Qword, ...) များဟာ အများအားဖြင့် ပလက်ဖောင်းအပေါ် မူတည်သည်။
ထို့အပြင် Integer အမျိုးအစားများတွင် သဘာဝဂဏန်းများ (ℕ, ဆိုရင်၊ အမှတ်မရှိ - Unsigned) နဲ့ အပြည့်အဝဂဏန်းများ (ℤ, ဆိုရင်၊ အမှတ်ရှိ - Signed) အကြားကွာခြားမှုရှိပါတယ်။
ဤအချက်ကို အမှတ်အသားတွင် အမှတ်အသားထဲမှာ ပါရှိသော (u
သို့မဟုတ် s
) ဖြင့် ကြည့်ရှုနိုင်ပါတယ်။
ဒီကာလမှာ အမှတ်ပါ အပြည့်အဝဂဏန်းများကို One's complement အနေဖြင့် ဖော်ပြထားနိုင်ပြီး၊ Two's complement အနေဖြင့်လည်း ဖော်ပြထားနိုင်ပါတယ်။
မည်သည့်အခြေအနေက မပြောင်းလဲပါက Two's complement ကို အသုံးပြုပါသည်၊ အကြောင်းကတော့ ယနေ့ခေတ် ကွန်ပျူတာသိပ္ပံတွင် အထူးသဖြင့် ယခုဖော်ပြချက်ကို သုံးစွဲပါသည်။
အမှတ်မရှိသောဂဏန်းများကို ငါ့စာရွက်စာတမ်းများတွင် uint
အဖြစ် ဖော်ပြထားပြီး၊ နောက်ပိုင်းအချိုးကို Bits အဖြစ် ဖော်ပြပါမည်။
အမှတ်ပါဂဏန်းများကို ငါ့စာရွက်စာတမ်းများတွင် sint
အဖြစ် ဖော်ပြထားပြီး၊ ထို့နောက် အချိုးကို Bits အဖြစ် ဖော်ပြပါမည်။
ငါ "char" ဒေတာအမျိုးအစားကို စာလုံးများအတွက် အသုံးမပြုပါဘူး၊ အကြောင်းက စာလုံးများစဉ်က အများအားဖြင့် Integer တန်ဖိုးစဉ်များကို အထူးသဖြင့် ဖော်ပြခြင်း ဖြစ်ပါတယ်။
ဒါကြောင့် ယင်းတန်ဖိုးများကို uint(8)[] အဖြစ် ဖော်ပြပါမည်။
ဥပမာများ:
အညွှန်း | C99 stdint.h -အထုတန်း |
ဖော်ပြချက် | နံပါတ်အကျယ် |
---|---|---|---|
uint(16) | uint16_t | အမည်မပါသောလုံးဝ၊ ၁၆ ဘစ်အရှည် | ၀ - ၆၅.၅၃၅ |
sint(8) | int8_t | လက်မှတ်ရှိသောလုံးဝ၊ ၈ ဘစ်အရှည်၊ နှစ်ခုဆက်တင် | -၁၂၆ - ၁၂၇ |
uint(24) | uint32_t:24 | အမည်မပါသောလုံးဝ၊ ၂၄ ဘစ်အရှည် | ၀ - ၁၆.၇၇၇.၂၁၆ |
ဖက်စ်ကွမ်မာ-တန်ဖိုးများ
Festkomma-တန်ဖိုး များသည် စီရင်တန်ဖိုးများ (Q) ၏ အတိုင်းအတာမှ ရရှိသော နံပါတ်တန်ဖိုးများဖြစ်ပြီး၊ ထိုနံပါတ်များတွင် ကွက် နှင့် နောက်ကွက်နေရာများ ပါဝင်သည်။
Festkomma-တန်ဖိုးများတွင် - ထို့ကြောင့် အမည်လည်းဖြစ်သည် - ကွက်၏ တည်နေရာကို ဒေတာအမျိုးအစားမှ တစ်ဆင့် သတ်မှတ်ထားသည်။
ဒါကြောင့် ဤဒေတာအမျိုးအစားအတွက် တိကျသော နံပါတ်အတိုင်းအတာတစ်ခု ရရှိပြီး၊ သင်္ချာအရ အဆိုပါ နံပါတ်အပိုင်း အဆုံးသတ် ဖြစ်သည်။
အကြောင်းအရာတွင် အဆိုပါဒေတာအမျိုးအစားသည် အမြန်ရေကြောင်းမှုပညာအရေးကြီးသော ကိရိယာမရှိသော ပလက်ဖောင်းများတွင် အဓိကသုံးသည်၊ အကြောင်းမှာ Festkomma-တန်ဖိုးများကို Integer ကိရိယာများဖြင့်တွက်ချက်နိုင်သောကြောင့် ဖြစ်သည်။
ဒါ့အပြင်၊ ပုံမှန်မူလို့ ကျွန်ုပ်တို့ အတိအကျလိုအပ်ချက်များ အတွက် ဒေတာဘေ့စ်-စီမံခန့်ခွဲမှုစနစ်များမှ အသုံးပြုသည်။
ဖိုင်နန်ရှယ်ဒေတာများကို အမြဲတမ်းသိမ်းဆည်းရန် စနစ်များကို စဉ်းစားပါ၊ အများစုသော ငွေကြေးများသည် ကွက်နောက်တွင် 2 ရှေ့ထားသည်။
(ဒါပေမယ့် Festkomma-တန်ဖိုးများကို သုံးခြင်းသည် အထင်မှားကြောင်း၊ ထိုနောက်အနေဖြင့် ငွေကြေးအနိမ့်ဆုံးအယူအဆ ကို Integer အဖြစ် သိမ်းဆည်းခြင်းနှင့် အခြားကိုယ်စားပြုမှုကို လက်ခံရမည်။)
Integer အချက်အလက်များနှင့် အထူးသဖြင့် Festkomma-တန်ဖိုးများတွင် ဂဏန်း၏ ရွေးချယ်မှုကို မတိုင်မီ နှင့် အပြီး သတ်မှတ်ပါ:
ufixed(9,7)
သည် ကွက်မရှိဘဲ ကွက်မတင်ရှိသော 9 Bit ကို ကွက်မမိုက်ပြီး 7 Bit ကို ကွက်နောက်ကွက်အတွက် အသုံးပြုသော ဒေတာအမျိုးအစားဖြစ်သည်။ ယင်းသည် စုစုပေါင်း 16 Bit အကျယ်ရှိပြီး၊ ဤကဲ့သို့သော Vektor နှစ်ခု ချိတ်ဆက်မှုရှိသော Integer မှ (0,0) မှ (511,127) အပြောင်းအလဲများကို ဖုံးလွှမ်းနိုင်သည်။
သို့သော် ဤအဓိပ္ပါယ်သည် 28 ဂဏန်းများကို သုံးစွဲမထားသော အနေဖြင့် အပျက်ဆုံးဖြစ်လာမည်၊ အကြောင်းမှာ အစဉ်အလိုက် (511,99) မှာ အကန့်အသတ်ရှိလိမ့်မည်။
တိုက်ရိုက် အဓိပ္ပါယ်ဖွင့်ဆိုခြင်းအား Festkomma-တန်ဖိုးကို နှစ်ခွဲသော Integer များမှ Vektor အဖြစ် သုံးခြင်းမဟုတ်ဘဲ၊ နောက်ကွက်အပိုင်းကို ချိုး ၏ အားလုံးသော ရွေးချယ်မှုအဖြစ် လက်ခံနိုင်သည်။
ufixed(9,7)
၏ ဥပမာဖြစ်သော 27 အပေါ် အခြေခံပြီး ဒေတာအပိုင်းများသည် 0.00 မှ 511 + 126⁄127 အထိ သွားနိုင်သည်။
ဒီအတွက် အတွက် အချိုးတစ်ခုကို 128 နဲ့စားရမည်။
ဒီနည်းလမ်းဖြင့် တွက်ချက်မှုများကို ပိုမိုလွယ်ကူစွာ စက်ဆောင်နိုင်ပြီး၊ အလွယ်တကူဖြစ်သဖြင့် ဤနည်းလမ်းသည် ကျင့်သုံးမှု ရရှိသည်။
သို့သော် ဤနည်းလမ်းသည် ထို့အပြင် ဝေဖန်မှုရှိသောကြောင့် အချိုးစာရင်းတွင် အာမခံထားသည့် ရွေးချယ်မှုမရှိတော့၊ တစ်ခုတည်းသော အချိုးတစ်ခုသည် 0.01
မဟုတ်ဘဲ 0.007874
ဖြစ်သည်၊ ၎င်းသည် အလေ့အထအလိုက် ပုံမှန်အမှားရရှိစေပါသည်။
အဆိုပါ အဓိပ္ပါယ်ဖွင့်ဆိုမှုကို သုံးသည့်နေရာတွင် အထောက်အထားထားသင့်ပါသည်။
အပြုံးစင်သို့မဟုတ် အပြုံးစင်အတန်များ
ဖလေ့ခွင်မာ-တန်ဖိုးများ သည် သင်္ချာပိုင်းတွင် ပိုမိုခက်ခဲသော အထွက်များ ဖြစ်ပြီး၊ တစ်ခုသော အပြုံးအရေအတွက်ကို သတ်မှတ်ထားသော ပ်တာမှခံ၍ သင်္ချာကိန်း၌ အပြုံးအရေအတွက်သည် အစိတ်အပိုင်းအဖြစ် ကိုက်ညီစွာ ဖွဲ့စည်းထားပြီး၊ အထူးသဖြင့် သိပ္ပံစာပေ သို့ ဦးတည်သည်။
ဤကို အကောင်အထည်ဖော်ရန် အများအားဖြင့် လက်ခံထားသော နည်းလမ်းကို
IEEE 754 ဖြင့် စံချိန်ထားပြီး၊ နိုင်ငံတကာအဆင့်တွင် ကုဒ်ဝင်ခွင့်ရခဲ့သည်။
ဖလေ့ခွင်မာ-တန်ဖိုးတစ်ခုတွင် ပုံမှန်အားဖြင့် အစိတ်အပိုင်းများ အောက်ပါအတိုင်း ဖြစ်သည်။
အမှတ်ပုံ (0 သို့မဟုတ် 1 ) |
အမြင့် | မန်တစ်စစ် |
အမှတ်ပုံကို ဘိုင်းနရီ အထောက်အထား အဖြစ် လွယ်ကူစွာ ထုတ်ဖော်နိုင်သော်လည်း၊ တကယ့်နံပါတ်ကို ညွှန်းချက်အရ
မန်တစ်စစ် * 2အမြင့်
ဖြင့် ဖွဲ့စည်းသည်။
ထို့အပြင် အထူးအခြေအနေများအတွက် သေချာသော တန်ဖိုးများ ရှိပြီး၊ အထူးသဖြင့် ±∞
နှင့် NaN
("တရားဝင်နံပါတ်မရှိပါ") ကို အဖုံးချုပ်ထားသည်။
ဖလေ့ခွင်မာ-တန်ဖိုးများသည် တိကျမှုသည် အရေးကြီးမဟုတ်သောအခါ တွင် အထူးကို အသုံးပြုရုံသာမက၊ ဤအမျိုးအစားသော တန်ဖိုးများသည် အလိုအလျောက် မျှတမှုမှားခြင်းနှင့် တိကျမှုဆုံးရှုံးမှုများ ဖြစ်ပေါ်ခြင်းကို ဖြစ်စေသည်။ ထို့ကြောင့် ဖလေ့ခွင်မာ-တန်ဖိုးများကို ဥပမာအနေဖြင့် 3D မော်ဒယ်များတွင် Vertex-ဗက်တာများ သို့မဟုတ် အထူးသရုပ်ပြမှုများအတွက် Bézier-/Spline-ကြိုးများကို သတ်မှတ်ရန် အသုံးပြုသည်။
ဒေတာပုံစံများတွင် ဖလေ့ခွင်မာ-တန်ဖိုးများကို float(မန်တစ်စစ်, အမြင့်)
အဖြစ် သတ်မှတ်ထားသည်။
IEEE 754 မှ ခွဲချက်ဖြစ်သော ပုံစံတစ်ခု ကို အသုံးပြုပါက၊ အဆိုပါ သတ်မှတ်ချက်ကို သက်ဆိုင်ရာဖြင့် ပြသသည်။