C/C++ Programmierung

Aufgabe 4

Für die Datentypen float und double soll jeweils die Maschinengenauigkeit E ermittelt werden. Das ist die kleinste positive Zahl, für die 1 + E > 1 gilt.

Um E zu bestimmen starten Sie mit E = 1 und dividieren E solange durch 2 (warum gerade 2 ?), bis die Bedungung 1 + E > 1 nicht mehr erfüllt ist. Der vorletzte Wert ist dann die gesuchte Genauigkeit.

Der Koprozessor auf Intel-basierten Rechnern rechnet intern mit einer erweiterten Genauigkeit. Zur Überprüfung der Abbruchbedingung ist daher eine Hilfsvariable notwendig, in der das Ergebnis (1 + E) in double-Genauigkeit zwischengespeichert wird.

Lösung für die Aufgabe

/* Header-Datei einbinden */
#include <stdio.h>

void Datentyp_float(void)
{
  float new, old, a; /* 3 Variablen vom Typ float */

  new = 1; /* new = 1 setzen, weil bei der Maschinengenauigkeit bei 1 begonnen werden soll. */
  a = 2;   /* a = 2 setzen <=> 1 + new */
  while (a > 1)
  {
    old = new;   /* alten Wert merken */
    new /= 2;    /* new durch 2 teilen */
    a = new + 1; /* zum Vergleichen in eine Variable vom Typ float schreiben */
  }

  /* Maschinengenauigkeit vom Typ float ausgeben. */
  printf("Maschinengenauigkeit beim Datentyp float: %e\n",old);
}

void Datentyp_double(void)
{
  double new, old, a; /* 3 Variablen vom Typ double */

  new = 1; /* new = 1 setzen, weil bei der Maschinengenauigkeit bei 1 begonnen werden soll. */
  a = 2;   /* a = 2 setzen <=> 1 + new */
  while (a > 1)
  {
    old = new; /* alten Wert merken */
    new /= 2;  /* new durch 2 teilen */
    a = new+1; /* zum Vergleichen in eine Variable vom Typ double schreiben */
  }

  /* Maschinengenauigkeit vom Typ double ausgeben. */
  printf("Maschinengenauigkeit beim Datentyp double: %e\n", old);
}

int main(void) /* hier beginnt das Hauptprogramm */
{
  Datentyp_float();  /* Procedure für Datentyp float aufrufen. */ 
  Datentyp_double(); /* Procedure für Datentyp double aufrufen. */

  return(0); /* Das Hauptprogramm gibt am Ende 0 zurück, da kein Fehler aufgetreten ist. */
}


Zurück zur Übersicht