Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Hva flyttall angår vil det vil sjeldent være grunn til å bruke noe annet enn double. Det som er viktig å bemerke seg er at et flyttall blir mindre og mindre nøyaktig desto større det blir og at man kan oppleve upresise beregninger selv på små verdier. 

 

Code Block
languagejava
titleLoss of precision
double d1 = 0.1;
System.out.println(d1); // 0.1

double d2 = 0.2;
System.out.println(d2); // 0.2
			
System.out.println(d1 + d2); // 0.30000000000000004 

// ??? 


Husk at vi prøver å representere flyttall med et begrenset antall bit, noe som
gir mulighet for feil. Presisjon er nøkkelordet, og som vist ovenfor er ikke denne
alltid helt perfekt. 

 

Code Block
languagejava
titleComparing double
double d1 = 0.1;
double d2 = 0.2;
double d3 = d1 + d2;
System.out.println( d3 == 0.3); // False

Med dette i bakhodet må vi alltid være varsomme når vi sammenligner 
doubleverdier. Ikke bruk ==, men heller en veldig liten epsilonverdi til å
filtrere bort små aritmetiske "feil".

Code Block
languagejava
titleEpsilonvalue
double eps = 0.00001;
 
System.out.println( (d3 - eps < 0.3) && (0.3 < d3 + eps)); // True
 

 

 


Double tar også tre "merkelige" verdier som er greit å vite om:

NaN: "
Not a number", NaN kan tildeles en double dersom vi prøver å utføre operasjoner som ikke lar seg gjøre. Se under, eksempel 1.
Infinity: "Uendelig", Infinity er større enn alle tall, og følger noen enkle regler, eksempel 2.
-Infinity: "Negativ uendelig", -Infinity er mindre en alle tall, og følger de samme reglene som Infinity.

...