A valós számok használata akkor kerül előtérbe, amikor olyan számolásokat végzünk, amelyek nem végezhetők el könnyedén egész számokon. A valós számok használata lassíthatja a program működését, mivel ezek kezelése néhány processzoron nincsen kellően gyorsítva, ezért csak akkor használjunk valós számokat, amikor feltétlenül szükséges. Nézzük a float típus használatát:
view plaincopy to clipboardprint?
-
float szám = 0;
-
System.out.println(szám);
-
szám = 1/3;
-
System.out.println(szám);
-
szám = 1f/3f;
-
System.out.println(szám);
-
szám = -1*0f;
-
System.out.println(szám);
-
System.out.println(szám == 0f);
-
szám = 100000000000000000000000000000000000000f;
-
System.out.println(szám);
-
szám = 1.0E38f;
-
System.out.println(szám);
Eredményül nem pont azt kapjuk, amit várnánk:
view plaincopy to clipboardprint?
-
0.0
-
0.0
-
0.33333334
-
-0.0
-
true
-
1.0E38
-
1.0E38
Az első 0.0 érthető, hiszen ezt adtuk értékül a szám nevű változónak. A második 0.0 azonban elgondolkodtató: az egyharmad értéke nem szabadna nulla legyen. Ennek oka az, hogy a Java nyelv két egész számot lát: elosztja az egyet hárommal: hányszor van meg egyben a három? Ugye egyszer sem, ezért kaptunk eredményül nullát. A problémát úgy tudjuk kikerülni, hogy a szám mögé írt f betűvel mondjuk meg, hogy ez a szám nem egész szám, hanem float. A 1f/3f művelet eredménye már 0.33333334, mivel a float csak nyolc számjegy pontosságú, azt követően nincs több értékes számjegy. A -0.0 eredmény a számábrázolás érdekessége, ugyanis van plusz nulla és mínusz nulla is, és ahogy a következő sorban látjuk: a kettő egyenlő egymással. A nagy számokat megadhatjuk a számjegyekkel is, de rövidebb a normálforma: 1.0·1038, amely a program forrásában 1.0E38 formán kódolódik.
A double használata annyiban tér el a float használatától, hogy az f karakter helyett d karaktert kell használnunk a literál megadásakor (amelyet akár el is hagyhatunk, hiszen a double típus az alapértelmezett lebegőpontos típus).
|