2.2.6 Liukuluvut

C++-kielessä on liukulukuja varten kaksi erilaista (erikokoista) tyyppiä, float ja double. Koska nykyisissä tietokoneissa on yleensä riittämiin muistia, kannattaa liukuluvut aina esittää double tyyppisinä. Tällöin esitystarkkuus voidaan säilyttää kaikissa tilanteissa parempana.

Borlandin C++-kääntäjä varaa float-liukuluvulle 32 bittiä (4 tavua) tilaa muistista. Muuttujalla saavutetaan noin 7 merkitsevän numeron tarkkuus. Kaksoistarkkuuden luvulle (double tai long float) varataan tilaa 8 tavua, jolloin luvun tarkkuus on noin 15 numeroa.

Tarkastellaan esimerkkiohjelmaa DOUBLE.CPP.

/* *********************************************************
DOUBLE.CPP
  Lukee näppäimistöltä kaksoistarkkuuden liukuluvun ja
  tulostaa sen näytölle 20 desimaalilla.
********************************************************* */

#include <iostream.h>
#include <stdio.h>

int main(void)
{
  double luku;

  cout << "Anna luku  > ";      // tulostetaan näytölle kehote
  cin >> luku;                  // luetaan luku näppäimistöltä
  printf("Annoit luvun %.20lf\n", luku);   // tulostetaan luku

  return 0;
}

Testattaessa ohjelmaa luvulla 0.12345678901234567890 saadaan tuloste

Anna luku  > 0.12345678901234567890
Annoit luvun 0.12345678901234567700

ja luvulla 12345.123456789012345 saadaan tuloste

Anna luku  > 12345.123456789012345
Annoit luvun 12345.12345678901150000000

Kaksoistarkkuuden luvuilla saavutettiin näin ollen 15 numeron tarkkuus.

Liukulukujen tallennustavasta johtuen ei voida koskaan olettaa, että luku olisi ehdottoman tarkka, tai että syöttämämme luku säilyisi täsmälleen samana koneessa tallennettuna.