Jeg har læst om forskellen mellem dobbelt præcision og enkelt præcision. I de fleste tilfælde synes float
og double
dog at være indbyrdes udskiftelige, dvs. at det ikke synes at påvirke resultaterne, hvis man bruger det ene eller det andet. Er dette virkelig tilfældet? Hvornår er floats og doubles indbyrdes udskiftelige? Hvad er forskellene mellem dem?
Her er hvad der står i standard C99 (ISO-IEC 9899 6.2.5 §10) eller C++2003 (ISO-IEC 14882-2003 3.1.9 §8) standarderne:
Der findes tre typer af flydende punkttyper: Der findes tre float-typer:
float
,double
oglong double
. Typendouble
giver mindst lige så stor præcision somfloat
, og typenlong double
giver mindst lige så stor præcision somdouble
. Mængden af værdier af typenfloat
er en delmængde af mængden af værdier af typendouble
; mængden af værdier af typendouble
er en delmængde af mængden af værdier af typenlong double
.
C++-standarden tilføjer:
Værdierepræsentationen af floatingpoint-typer er implementeringsdefineret.
Jeg vil foreslå, at du tager et kig på den fremragende What Every Computer Scientist Should Know About Floating-Point Arithmetic, der dækker IEEE-standarden for flydende komma i dybden. Du lærer om repræsentationsdetaljerne, og du vil indse, at der er en afvejning mellem størrelse og præcision. Præcisionen af floating point-repræsentationen øges, når størrelsen falder, og derfor er floating point-tallene mellem -1 og 1 dem med størst præcision.
Floats har mindre præcision end doubler. Selv om du allerede ved det, kan du læse Hvad vi bør vide om Floating-Point Aritmetic for at få en bedre forståelse.