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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...