Zum Inhalt springen

Falsches Ergebnis bei einer Rechenoperation


Empfohlene Beiträge

Geschrieben

Moin,

Beim c-lernen bin ich mal wieder auf ein Problem gestoßen: Ich soll ein Problem mit bestimmten rechenoperationen schreiben, und für manche Ausdrücke bei manchen Werten bekomme ich falsche Ergebnisse. Vermutlich liegt der Fehler in Konvertierungsverlusten bei bei bestimmten Datentypen, aber ich finde in meinem Code keinen Fehler. Vielleicht kann sich ja mal jemand mein Beispiel ansehen und mir sagen wo mein Fehler ist. Danke!

Im entsprechenden Beispiel sollte als ergebnis 4.84e-2 herauskommen, aber seht selbst!

MfG

Tizian

--------------------------------------------------------------------------

--------------------------------------------------------------------------

#include<stdlib.h>

#include<stdio.h>

#include<math.h>

int main(void)

{

double PI = 3.14159265358979323846;

int n, m;

double x, y, expr1, expr2, expr3, expr4, u31;

n=10; m=-20; x=5.5; y=0.8;

u31 = (pow(x,4) + pow(y,4))/4;

expr3 = (1/( u31 +2))*(log(u31 +1));

printf("Ausdruck 3 ist: %16.15e\n", expr3);

system("pause");

return 0;

}

Geschrieben

Moin,

Habe den Fehler entdeckt! Hab in der Rechnung einmal ausversehen eine Variable mit einer Konstante vertauscht. So hat der Term für manche Rechnungen gepasst und für manche nicht...

Ciao

Tizian

Geschrieben

Moin, Ich bins wieder.

Hab mein erstes Problem ja gelöst, hab dafür aber ein neues :-/

Ich bekomme die Ausgabe langer Zahlen nicht hin! im Programm scheinen sie korrekt verwendet zu werden, denn das Endergebnis stimmt. Aber die Darstellung des Zwischenergebnisses funktioniert nicht so wie geplant.

Warum bekomme ich bei der Ausgabe von m und n via %le, %e, %d und bei k via %ld falsche Anzeigen auf dem Schirm?

Wo ist der Fehler?

Danke

---------------------------------------------------------------------------

---------------------------------------------------------------------------

#include<stdlib.h>

#include<stdio.h>

#include<math.h>

int main(void)

{

long long n,m;

long long k;

n=2000000000; m=1000000000;

printf("n = %le\n",n);

printf("n = %ld\n",n);

printf("m = %le\n",m);

printf("m = %ld\n",m);

printf("n+m = %le\n",(long long)(n+m));

printf("n+m = %ld\n",(long long)(n+m));

k = (n+m);

printf("k = %ld\n",k);

system("pause");

return 0;

}

Geschrieben
Warum bekomme ich bei der Ausgabe von m und n via %le, %e, %d und bei k via %ld falsche Anzeigen auf dem Schirm?
Weil keines dieser Formate auf long long int passt. Siehe dazu auch die Dokumentation von printf.

Benutz %ll, gefolgt von d, i, o, u, x oder X.

e und le sind für double bzw. long double vorgesehen.

Du solltest übrigens auch auf deine Literale achten. Wenn du keine weitere Kennzeichnung angibst, werden sie als int interpretiert. Kennzeichne long long-Literale mit ll am Ende.

Der Cast der Summe auf long long ist unnötig.

Geschrieben
Weil keines dieser Formate auf long long int passt. Siehe dazu auch die Dokumentation von printf.

Benutz %ll, gefolgt von d, i, o, u, x oder X.

e und le sind für double bzw. long double vorgesehen.

Ah ja. Mit lld funktioniert das jetzt. In meinem Skript stand dazu leider nichts.

Du solltest übrigens auch auf deine Literale achten. Wenn du keine weitere Kennzeichnung angibst, werden sie als int interpretiert. Kennzeichne long long-Literale mit ll am Ende.

Hat bei mir auch ohne Kennzeichnung der Literale funktioniert. Lag das daran, das ich die Variablen vorher schon als long long initiiert habe?

Der Cast der Summe auf long long ist unnötig.

Das ist irgendwann mal auf der Fehlersuche passiert...

Ciao

tizian

Geschrieben
Hat bei mir auch ohne Kennzeichnung der Literale funktioniert. Lag das daran, das ich die Variablen vorher schon als long long initiiert habe?
Nein, das liegt daran, dass deine Literale so gerade eben noch in den Wertebereich eines 32Bit signed int passen.

Bei 2.147.483.647 ist Schluss.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...