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