Übung nächste woche dienstag wichtig!!

Gal Martin
Beiträge: 194
Registriert: 11.10.2006, 14:53

Übung nächste woche dienstag wichtig!!

Beitrag von Gal Martin »

für alle die sich schon einige stunden mit ihrem programm plagen und sich fragen wieso das double euerer myexp fkt immer den wert 0 herauswirft, gibts jetzt abhilfe.
der dank geht natürlich an unsere tollen proffesoren die uns nicht gesagt haben das man ein double nicht mit %d aufruft sondern mit %lf (für longfloat). es is freitag der tag war sonnig und dank dieser meisterleistung hab ich so viel zeit ver********* das ich wiedermal net raus konnte DANKE ....
also nicht vergessen bei ausgabe der werte sprich printf("%lf anstatt das vermutete %d, und alles sollt passen falls es noch probs gibt ich könnte die programme online stellen aber sie sind nicht wirklich schwer
schönes we
ciao
WO IS DA GAL?!?! :twisted:
© Wiesinger

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Was, das wurde euch tatsächlich nicht gesagt?
Hm, sowas ist natürlich ärgerlich ...

Wurde euch beigebracht, wie man die Manpages aufruft?
Wenn man nämlich in der Shell (Konsole, Bash, ...) "man 3 printf" aufruft ist genau erklärt, was man bei printf wie verwendet.

Ich empfehle übrigens, den Compiler mit den Parametern -Wall und -pedantic aufzurufen, also so: "gcc -pedantic -Wall -o Ausgabedatei Quelltext".
Dann liefert der Compiler eine Warnung, wenn man %d bei Double-Variablen verwendet.

Gal Martin
Beiträge: 194
Registriert: 11.10.2006, 14:53

Beitrag von Gal Martin »

ja es ist war das ich hätte im manual nachschauen können
aber wie gesagt als anfänger habe ich den fehler in meiner Funktion gesucht und nicht im printf und da verging halt viel zeit weil ich alles versucht habe... :(
nächstes mal werde ich mir das sicher vorknöpfen
aber danke für den typ mit dem -wall
-pendantic kenne ich net :P
WO IS DA GAL?!?! :twisted:
© Wiesinger

Benutzeravatar
Gregor
Beiträge: 69
Registriert: 09.10.2006, 16:32

Beitrag von Gregor »

Ich schließe mich gleich ärgernd an.. Was für einen Sinn macht long wenn das genausoviele byte hat wie int?

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Gregor hat geschrieben:Ich schließe mich gleich ärgernd an.. Was für einen Sinn macht long wenn das genausoviele byte hat wie int?
Es gibt long int und short int.
Int ist auf manchen Rechnern long int, auf anderen aber short int. Das ist betriebssystemabhängig.
Aber meistens brauchst den Unterschied eh nicht, einfach int verwenden und fertig.

Benutzeravatar
Gregor
Beiträge: 69
Registriert: 09.10.2006, 16:32

Beitrag von Gregor »

Ah, das macht Sinn, danke.. Trotzdem mag ich Sprachen lieber die sich um diese haarigen(haarspalterischen) Details kümmern - auf jeden Fall für so Kleinprogramme (-;

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Wo hast Du denn das gebraucht? Für den Sieb des Erathostenes?
Da hab ich einfach int genommen und mir war egal, wieviel byte int hat.
man sizeof ;)

Benutzeravatar
Gregor
Beiträge: 69
Registriert: 09.10.2006, 16:32

Beitrag von Gregor »

Nein, nicht das Sieb. Die Exponentialfunktion, bzw. die Fakultaet( zum selberschreiben)
Naja, ich wollte die Genauigkeit erhöhen, und dachte das ist DIE Anwendung für long. Bis mich sizeof eines besseren belehrte. Jetzt verwende ich double. :D

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Genauigkeit erhöhen? Mit einem Integer-Typ?
Du meinst wohl eher, daß Du größere Zahlen haben wolltest.

Meinst Du sowas?

Code: Alles auswählen

double fak(int j)
{
 int i;
 double result = 1.0;
 
 for(i = 1; i <= j; i++) result *= (double) i;

 return result;
}
Exakte Werte bekommst Du bei großen Zahlen allerdings nicht mehr.

Benutzeravatar
Gregor
Beiträge: 69
Registriert: 09.10.2006, 16:32

Beitrag von Gregor »

Ich wollte größere Zahlen weil dass die Genauigkeit bei der exp Funktion erhöht.. :) (Wir sollten sie als Reihenentwicklung implementieren)

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Das hilft aber nur bei double vs float und nicht bei größeren Ganzzahlen.
Int wird nie ungenau, da kann Dir höchstens passieren, daß die Variable überläuft.

Dann halt so:

Code: Alles auswählen

double exp(double base, int ex)
{
 int i;
 double result = 1;

 for(i = 0; i < ex; i++) result *= base;

 return result;
}

Benutzeravatar
Gregor
Beiträge: 69
Registriert: 09.10.2006, 16:32

Beitrag von Gregor »

Ich meinte exp() wie e^x nicht pow(). Und die Reihenentwicklung dazu lautet:

1+\frac{z}{1!}+\frac{z^2}{2!}+\cdots

Und wenn meine Fakultaet höhere Zahlen exakt(also ohne Überlauf) verarbeiten kann, dann kann ich die Reihe später abbrechen, und bekomme genauere Zahlen..

Ciao, G

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Achso, alles klar! Für sowas ist int eh ungeeignet, da man vor der Division sowieso auf float oder double konvertieren muß. Paß halt bei der Konvertierung auf.
Ihr zarrts aber ordentlich an ...

Gal Martin
Beiträge: 194
Registriert: 11.10.2006, 14:53

Beitrag von Gal Martin »

jo ka wieso wir den anderen so davon düsen aber wenigstens haben wir mehr davon:D
WO IS DA GAL?!?! :twisted:
© Wiesinger

m0tzerl
Beiträge: 89
Registriert: 06.11.2006, 00:16

Beitrag von m0tzerl »

leute, hats schon irgendwer für dienstag das prog? plag mich gerade herum, habs an und für sich geschrieben, nur einige probleme. irgendwie akzeptiert er das struct nicht, das an die Read-Funktion übergeben wird und zum anderen liest er die werte ohne jegliche fehlermeldung einfach nicht aus...

könnte bitte wer einen funktionierenden source posten, damit ich meine fehler ausbessern kann. wär ganz nett. :)

Antworten

Zurück zu „Datenverarbeitung für Physiker I“