long double mit printf ausgeben - wie?

04/01/2009 - 09:58 von Ottmar Ohlemacher | Report spam
Hallo,

ich hab mir ein kleines Programm geschrieben, um die rand() Funktion ein
bischen auszutesten.

Leider kommen bei der Ausgabe der Durchschnittswerte im Datentype long
double nur Mondwerte heraus, also abwechselnd positive und negative Zahlen.

Tante googel hat mir verraten, dass das Formatzeichen für long double in
printf %Lf sei, aber aber auch das konnte den Fehler nicht beheben.

Kompiliert wird das Programm unter gcc Debian Etch.

#include <stdio.h>
#include <stdlib.h> /* für Bibliotheksfunktion rand() */
int main(void) {
long ratezahl=0, zaehler=0, summe=0, maximum=0;
long double durchschnitt;
while(1){
++zaehler;
ratezahl = rand();
summe=summe+ratezahl;
if(ratezahl>maximum)
maximum=ratezahl;
durchschnitt= (long double) summe / (long double) zaehler;

printf("%ld %ld %ld %Lf",ratezahl,zaehler,maximum,durchschnitt);
getchar();
}
return 0;
}


Kann mir jemand sagen, weshalb als Durchschnittswert nur Unsinn ausgegeben
wird?

Danke für Info.

Ottmar
 

Lesen sie die antworten

#1 Ottmar Ohlemacher
04/01/2009 - 10:39 | Warnen spam
Am Sun, 4 Jan 2009 09:58:37 +0100 schrieb Ottmar Ohlemacher:

Hallo,

ich hab mir ein kleines Programm geschrieben, um die rand() Funktion ein
bischen auszutesten.

Leider kommen bei der Ausgabe der Durchschnittswerte im Datentype long
double nur Mondwerte heraus, also abwechselnd positive und negative Zahlen.

Tante googel hat mir verraten, dass das Formatzeichen für long double in
printf %Lf sei, aber aber auch das konnte den Fehler nicht beheben.

Kompiliert wird das Programm unter gcc Debian Etch.

#include <stdio.h>
#include <stdlib.h> /* für Bibliotheksfunktion rand() */
int main(void) {
long ratezahl=0, zaehler=0, summe=0, maximum=0;
long double durchschnitt;
while(1){
++zaehler;
ratezahl = rand();
summe=summe+ratezahl;
if(ratezahl>maximum)
maximum=ratezahl;
durchschnitt= (long double) summe / (long double) zaehler;

printf("%ld %ld %ld %Lf",ratezahl,zaehler,maximum,durchschnitt);
getchar();
}
return 0;
}


Kann mir jemand sagen, weshalb als Durchschnittswert nur Unsinn ausgegeben
wird?




Ok - der Fehler war, daß summe trotz des Datentyps long nach ganz wenigen
Durchgàngen einen Überlauf erzeugt hat.

Falls es jemanden interessieren sollte, hier die korrigierte Fassung:

#include <stdio.h>
#include <stdlib.h> /* für Bibliotheksfunktion rand() */
int main(void) {
long ratezahl=0, zaehler=0, maximum=0;
long double durchschnitt, summe=0.0;
while(1){
++zaehler;
ratezahl = rand();
summe=summe+ratezahl;
if(ratezahl>maximum)
maximum=ratezahl;
durchschnitt= summe / zaehler;

printf("%ld %ld %ld %Lf",ratezahl,zaehler,maximum,durchschnitt);
getchar();
}
return 0;
}

Ottmar

Ähnliche fragen