Olvastam a kettős pontosság és az egyszeres pontosság közötti különbségről. A legtöbb esetben azonban úgy tűnik, hogy a float
és a double
felcserélhető, azaz az egyik vagy a másik használata nem befolyásolja az eredményeket. Valóban így van ez? Mikor felcserélhetők a float és a double értékek? Milyen különbségek vannak közöttük?
A C99 (ISO-IEC 9899 6.2.5 §10) vagy a C++2003 (ISO-IEC 14882-2003 3.1.9 §8) szabványok a következőket írják:
Három lebegőpontos típus létezik:
float
,double
éslong double
. Adouble
típus legalább akkora pontosságot biztosít, mint afloat
, és along double
típus legalább akkora pontosságot biztosít, mint adouble
. Afloat
típusú értékek halmaza adouble
típusú értékek halmazának részhalmaza; adouble
típusú értékek halmaza along double
típusú értékek halmazának részhalmaza.
A C++ szabvány hozzáteszi:
A lebegőpontos típusok értékreprezentációja implementációfüggő.
Javaslom, hogy nézze meg a kiváló What Every Computer Scientist Should Know About Floating-Point Arithmetic című könyvet, amely részletesen foglalkozik az IEEE lebegőpontos szabványával. Megismerheti a reprezentáció részleteit, és rájön, hogy kompromisszumot kell kötni a nagyságrend és a pontosság között. A lebegőpontos reprezentáció pontossága a nagyságrend csökkenésével nő, ezért a -1 és 1 közötti lebegőpontos számok a legnagyobb pontosságúak.
A lebegőszámok kisebb pontossággal rendelkeznek, mint a páros számok. Bár már tudja, olvassa el a Mit kell tudnunk a lebegőpontos aritmetikáról a jobb megértés érdekében.