Kezdőoldal » Számítástechnika » Programozás » C# -ban mi a különbség a...

C# -ban mi a különbség a "float" és a "double" között? Milyen esetekben jobb használni az egyiket, és mikor a másikat?

Figyelt kérdés
2017. márc. 17. 14:13
 1/4 anonim ***** válasza:
100%
Az attól függ, mekkora számokat akarsz tárolni a változóidban. Ez már csak optimalizálástól függ.
2017. márc. 17. 14:28
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
100%

Igazából van még egy harmadik is, a "decimal".


Ezeknek az a lényege, hogy valós számokat írjunk le vele. Már csak az a kérdés, hogy hány tizedesjegy pontossággal.

A float egy valós számot 32 biten ábrázol, míg a double 64 bitet használ fel (tehát utóbbi pontosabb). A decimal a legpontosabb a maga 128 bit helyigényével - ezt főleg pénzügyi és más, nagy pontosságot igénylő műveletekhez használják fel.


A literálokat pedig így jelölheted:

1.2f - Ez egy float szám

1.2d - Ez egy double szám

1.2m - Ez pedig egy decimal


Az általuk támogatott intervallumok pedig:

float

-3.402823e38 .. 3.402823e38


double

-1.79769313486232e308 .. 1.79769313486232e308


decimal

-79228162514264337593543950335 .. 79228162514264337593543950335

2017. márc. 17. 14:34
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:
Értem, köszönöm.
2017. márc. 17. 16:27
 4/4 anonim válasza:

Jaja, a #2-esnek igaza van. De egy kicsit kibővíteném.



A törtszámokat a gép normálalakban tárolja el. Pl. 34 x 2^5 (a gépek 2-es számrendszert használnak). Két fajta tört szám van: a float (floating point, lebegőpontos szám) és a double (double precision, dupla pontosságú lebegőpontos szám), amik 32 ill. 64 biten tárolják a számokat.


A számok tárolása úgy történik, h a 32 v. 64 bitből az első a szám előjele (0: pozitív, 1:negatív). Float esetén a következő 8, doublenél pedig 11 bit tárolja a kitevőt (ez az előző példánál maradva 5), a többi bit pedig a magát a számot (34). A double nagyobb pontosságra képes, mint a float: a float ~7 számjegyet tud tárolni, míg a double ~15-öt.


Megjegyzem, igen ritka eset, hogy float-ot kelljen használnod. A double, annak ellenére hogy nagyobb, a rajta elvégzett műveletek nem lasssabbak a floaton elvégzett műveleteknél, mert a processzorok így vannak optimalizálva.


Vannak olyan esetek, amikor viszont se double-t, se float-ot nem használhatsz.

Futtasd le az alábbi kódot:


Console.WriteLine(0.1 + 0.2 == 0.3);


False-t fog kiírni. Ennek az oka az, h a gép nem képes pontosan tárolni bizonyos számokat, mert nem minden szám véges, ha kettes számrendszerben írjuk le. A 0.1 például 2-es számrendszerben 0.0011001100110011....A gép kerekíteni fogja, és így az eredmény már nem lesz egyenlő 0.3-mal. Tizes számrendszerben is van ilyen, pl. 1/3: 0.33333333333333. Tehát óvatosnak kell lenni. Egyébként az ilyen esetekre találták ki a decimal-t, ami 128 biten tárolja a számokat, 10-szer lassabb a floatnál és a double-nél, De: képes ábrázolni az összes 10-es szr.-ben leírható számot, pontosan. Ha decimalt használsz, akkor 0.

1 + 0.2 == 0.3 igaz lesz.

2017. máj. 3. 19:57
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!