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?
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
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!