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.
/* 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. */ }