|
Сузувчи нуқтали берилганлар типи
|
bet | 27/154 | Sana | 08.01.2024 | Hajmi | 5,29 Mb. | | #131939 |
Bog'liq MajmuaСузувчи нуқтали берилганлар типи
Сузувчи нуқтали берилганлар типи ёрдами каср қисми мавжуд бўлган сонлар кўрсатилади. С# да сузувчи нуқтали берилганларнинг иккита тури мавжуд: float ва double, мос равишда бирламчи ва иккиланган аниқликдаги сонларни ифодалаш учун ишлатилади. Жумладан, float типига 1.5Е-45 дан 3.4Е+38 гача бўлган 32 бит ажратилади, double типига эса ишлатилиши мумкин бўлган сонлар оралиғини 5Е-324 дан 1.7Е+308 гача кенгайтирувчи 64 бит ажратилади. Амалда кўпроқ double типи ишлатилади. Бунинг сабабларидан бири С# кутубхонасидаги математик функциялар double типига эга бўлган қийматларнинг ишлатишидир. Масалан, System.Math. стандарт синфида аниқланган Sqrt() методи аргументни double типига ўтказиб квадрат илдизини ҳам double қийматида қайтаради. Қуйида мисол тариқасида учбурчакнинг томонлари берилган бўлса, Герон формуласи ёрдамида учбурчак юзасини ҳисоблаш учун sqrt() методи қўлланган дастур келтирилади.
using System;
class Uchburchak_yuzi {
public static void Main() {
double a, b, c;
a = 4.2;
c = 5.5; b = 6;
double p, s;
p = (a + b + c) / 2;
s = Math.Sqrt(p * (p - a) * (p - b)*(p - c));
Console.WriteLine("Учбурчак юзи s= " + s);
Бу ерда sqrt() методининг ишлатилишига эътибор беринг. Шу метод тегишли синфга нуқта орқали мурожат қилиняпти.
}
}
Юкоридаги дастур натижаси қуйидагича бўлади:
Учбурчак юзи s=11,1609472604255
Юқорида айтилганидек, Sqrt() методи Math. синфига тегишли бўлганлиги учун метод номи синфдан нуқта билан ажратилган. Бу каби ёзувни WriteLine() методидан олдин Console синфининг нуқта билан ажратилганида ҳам кўрган эдик. Барча методларни ҳам олдин улар тегишли бўлган синф номини кўрсатган ҳолда чақирилиши шарт эмас, лекин баъзиларига айнан шундай мурожаат қилиш шарт.
Decimal типи
Одатда жуда катта аниқликни талаб қиладиган пул ҳисоб китоблари каби ҳисоблашлар С# да decimal типида олиб борилиши мақсадга мувофиқдир. Чунки, decimal типида 1Е-28 дан 7.9Е+28 гача бўлган оралиқдаги қийматларга 128 бит ажратилади. Бизга маълумки, сузувчи нуқтали сонлар устида арифметик ҳисоблашлар бажарилганда қийматларни бирнеча марта яхлитланади ва натижада унча аниқ бўлмаган қийматлар олинади. Decimal типи эса яхлитлашдаги хатоликларни тўғрилайди ва сонларни унинг ўнли нуқтадан кейин 28та хона аниқлигида ҳисоблайди.
Decimal типидаги ўзгармаслардан сўнг m ёки М қўшимча ёзилиши керак. Акс ҳолда улар сузувчи нуқтали ўзгармаслар деб қабул қилинади. Масалан:
using System;
class dicimal_misol {
public static void Main(){
decimal s1 = 35m;
decimal m1;
m1 = s1 - s1 * 22.5m / 97m ;
Console.WriteLine("decimal типида: натижа m1="+ m1);
double s2 = 35;
double m2;
m2 = s2 - s2 * 22.5 / 97;
Console.WriteLine(" double типида: натижа m2=" + m2);
}
}
Бу дастур ишга туширилганда қуйидаги натижа ҳоси бўлади:
Олинган натижалардан кўриниб турибдики, decimal типида аниқлик юқори бўлиб double типида эса яхлитланган ҳолда бажарилар экан.
|
| |