Mi a különbség a float és a double között?

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 és long double. A double típus legalább akkora pontosságot biztosít, mint a float, és a long double típus legalább akkora pontosságot biztosít, mint a double. A float típusú értékek halmaza a double típusú értékek halmazának részhalmaza; a double típusú értékek halmaza a long 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.

Kommentárok (0)
  • A double 64 és egyszeres pontosságú (float) 32 bit.
  • A double-nak nagyobb a mantisszája (a valós szám egész számú bitjei).
  • Az esetleges pontatlanságok kisebbek lesznek a duplában.
Kommentárok (0)

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.

Kommentárok (2)