logo

C plūduriuojantis ir dvigubas

Plūdė ir dvigubai yra du primityvūs C programavimo duomenų tipai, naudojami saugoti dešimtainės reikšmės . Jie abu saugo slankiojo kablelio skaičius, tačiau skiriasi tikslumo lygiu, iki kurio gali saugoti reikšmes.

Šiame straipsnyje mes išsamiai išnagrinėsime kiekvieną iš jų, jų atmintį ir skirtumą tarp jų.



Plūdė

Slankusis kablelis naudojamas vieno tikslumo slankiojo kablelio skaičiams saugoti. Jis gali saugoti dešimtaines reikšmes iki 6–7 skaitmenų po kablelio.

Sintaksė

 float var_name ;>
  • Plūdės dydis yra 4 baitai.
  • Float gali saugoti vertes, kurios skiriasi nuo 3,4 x 10-38iki 3,4x 1038.
  • Jis gali saugoti vertes iki 7 kableliai po kablelio neprarandant tikslumo.
  • Plūduriavimo formato specifikacija yra %f.

Pavyzdys

C




java eilutės sujungimas





// C Program to illustrate float> #include> > int> main()> {> >// Syntax of declaring and initializing> >// the float variable> >float> myVariable = 789.123456f;> > >// printing floating point number> >printf>(>'Float value is %f'>, myVariable);> >return> 0;> }>

sąrašą į masyvą java

>

>

Išvestis

Float value is 789.123474>

Kaip matote aukščiau pateiktoje išvestyje, dešimtainių skaičių tikslumas prarandamas po 7-ojo skaitmens dėl ribotų plūduriuojančių bitų. Tokiais atvejais rekomenduojama naudoti dvigubą duomenų tipą.

SIM kortelė įdėta, bet nėra „Android“ paslaugos

Pastaba: Pagal numatytuosius nustatymus visi realiųjų skaičių literalai yra dvigubo tipo. Galime pridėti an f pažodinio žodžio pabaigoje, kad apibrėžtumėte jį kaip plūduriuojantį tipą.

Dvigubas

Dvigubas naudojamas dvigubo tikslumo slankiojo kablelio reikšmėms saugoti. Tai didesnė plūdės versija, kuri gali saugoti tikrus skaičius iki 15 skaitmenų po kablelio.

  • Dvigubo dydis yra 8 baitai.
  • Dvigubo diapazonas yra 1,7 × 10-308iki 1,7 × 10+308.
  • Jis gali saugoti vertes iki 15 kablelio neprarandant tikslumo.
  • Dvigubo formato specifikacija yra %lf

Pavyzdys

C




#include> > int> main()> {> >// Syntax of declaring and initializing> >// the double variable> >double> myVariable = 789.123456;> >printf>(>'Double value is %lf'>, myVariable);> >//%lf or %f both can be used to> >// print Float values> >return> 0;> }>

>

dvejetainė paieška
>

Išvestis

Double value is 789.123456>

Kaip saugomi plūduriuojantis ir dvigubas?

C kalba seka IEEE 754 standartas slankaus kablelio reikšmėms atmintyje atvaizduoti. Skirtingai nuo int tipo, kuris tiesiogiai saugomas atmintyje dvejetaine forma, slankiosios reikšmės yra padalintos į dvi dalis: eksponentą ir mantisą, o tada saugomos.

Pagal IEEE 754, slankiojo kablelio reikšmės susideda iš 3 komponentų:

    Ženklo bitas: tai yra skaičiaus ženklas. 0 reiškia teigiamą, o 1 reiškia neigiamą. Šalinis eksponentas: skaičiaus eksponentas negali būti tiesiogiai saugomas, nes jis gali būti ir neigiamas, arba teigiamas, todėl naudojame šališką rodiklį, kai prie eksponento pridedame tam tikrą paklaidą. Normalizuota mantisa: Matissa yra skaičius moksliniu žymėjimu, t. y. tikslūs skaičiaus bitai.

C float atminties vaizdavimas

Plūdės dydis yra 32 bitai, iš kurių:

    Reikšmingiausias bitas (MSB) naudojamas saugoti ženklas numerio.
  • Kitas 8 bitai yra naudojami saugoti eksponentas.
  • Likusios 23 bitai yra naudojami saugoti mantisa.
plūdės atvaizdas atmintyje

Pavyzdys

dvejetainis medis vs bst

Paimkime 65,125 kaip dešimtainį skaičių, kurį norime išsaugoti atmintyje.

Converting to Binary form, we get: 65 = 1000001 0.125 = 001 So, 65.125 = 1000001.001 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, we will get the baised exponent by adding the exponent to 127, = 127 + 6 = 133 Baised exponent = 10000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000101 00000100100000000000000>

C dvigubas atminties vaizdavimas

Plūdės dydis yra 32 bitai, iš kurių:

    Reikšmingiausias bitas (MSB) naudojamas saugoti ženklas numerio.
  • Kitas 11 bitų yra naudojami saugoti eksponentas.
  • Likusios 52 bitai yra naudojami saugoti mantisa.
dvigubo atvaizdo atmintis

Pavyzdys

Paimkime to paties skaičiaus 65.125 pavyzdį,

From above, 65.5 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, bais is 1023. So, = 1023 + 6 = 1029 Baised exponent = 10000000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000000101 0000010010000000000000000000000000000000000000000000>

Skirtumai tarp plūdinio ir dvigubo

Taškai

Plūdė

Dvigubas

Tikslumas „Float“ yra vieno tikslumo IEEE 754 slankusis kablelis, užtikrinantis iki 7 kablelio tikslumą. Double yra dvigubo tikslumo IEEE 754 slankusis kablelis, užtikrinantis iki 15 kablelio tikslumą.
Atminties naudojimas „Float“ naudoja 32 bitus arba 4 baitus atminties. „Double“ naudoja 64 bitus arba 8 baitus atminties.
diapazonas „Float“ gali saugoti vertes, kurios skiriasi nuo 3,4 x 10-38iki 3,4x10+38. Dvigubo diapazonas yra 1,7 × 10-308iki 1,7 × 10+308.
Formato specifikatorius %f yra slankiojo formato specifikacija. %lf yra dvigubo formato specifikacija.
Atminties vaizdavimas Ženklas = 1 bitas
Rodiklis = 8 bitai
Mantisa = 23 bitai
Ženklas = 1 bitas
Rodiklis = 11 bitų
Mantisa = 52 bitai

Išvada

Apibendrinant galima pasakyti, kad C naudoja ir plūduriuojančius, ir dvigubus dešimtainius skaičius, tačiau jie skiriasi tikslumu, atminties naudojimu, diapazonu ir greičiu. Kai vietos ribota ir tikslumas gali būti pažeistas, geriau naudoti plūduriuojančią sistemą, o dviguba naudojama didelio tikslumo programoms, kur erdvė nėra problema. Labai svarbu pasirinkti tinkamą duomenų tipą, atsižvelgiant į programos reikalavimus.