Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » eine Rechnung, zwei Ergebnisse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.01.2008, 23:30 Uhr
~Satru
Gast


Hallo,
ich habe seit Kurzem angefangen, mich mit C++ zu beschäftigen.

Ich hab ein Programm geschrieben, dass folgende Rechnung ausführt:

(in Worten: Fünf ZweiDrittel minus 117 geteilt durch 33)


Code:
cout.precision(16);
cout<<5+2/3-((117)/(3*11));



Zu Meiner Überraschung kam genau 2 raus, obwohl 2,121212121212 rauskommen müsste. Gut, Rundungsfehler dachte ich.

Dann habe ich die Rechnung ein wenig umgestellt:


Code:
cout.precision(16);
long double test,test2,test3,test4;
test =5+2/3;
test2=117;
test3=3*11;
test4=test-(test2/test3);
cout<<test4;



Als Ergebnis für test4 kommt hier 1,454545454545 raus (was für einen Rundungsfehler doch schon ziemlich krass wäre).

Ich habe schon etliche Klammer hinzugefügt und wieder weggenommen, ausdrücke wie 3*11 zusammengefasst, das programm

dauernd neu kompliert, den Variabelntyp zu float bzw Double geändert, usw, aber ohne Veränderung des Ergebnisses.
Achja, ich benutze den CodeBlocks-Compiler.

Wo liegt mein Fehler? :>

mfg

Satru
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.01.2008, 23:39 Uhr
~Satru
Gast


Fehler gefunden, ich rechne mit integerzahlen. richtig müsste es heißen


Code:
cout<<5.f+2.f/3.f-((117.f)/(3.f*11.f));

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.01.2008, 18:19 Uhr
xXx
Devil


nimm doch einfach double

C++:
std::cout << 5.0 + 2.0/3.0 - (117.0 / (3*11)) << std::endl;
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.01.2008, 18:45 Uhr
0xdeadbeef
Gott
(Operator)


Prinzipiell reicht auch

C++:
std::cout << 5 + 2/3.0 - (117.0 / (3*11)) << std::endl;


wichtig ist halt nur, dass bei einer Division nicht zwei Integer im Spiel sind. Ansonsten, was die Suffixe angeht, 1., .2, 1.2, 1e3, 1.e3, .2e3, 1.2e3 sind double-Konstanten, mit f bzw. F hintendran wird ein float draus, mit l bzw. L ein long double. Also

C++:
float f = 1.2e3f;
double d = 1.2e3;
long double ld = 1.2e3l;


Aus Gründen der Lesbarkeit sind double-Literale am gebräuchlichsten.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.01.2008, 19:06 Uhr
xXx
Devil


naja gibt auch noch u für unsigned usw.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.01.2008, 21:16 Uhr
0xdeadbeef
Gott
(Operator)


...aber nicht bei Fließkommazahlen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.01.2008, 14:28 Uhr
xXx
Devil


stimmt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.01.2008, 17:18 Uhr
0xdeadbeef
Gott
(Operator)


Sag ich doch.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.01.2008, 20:30 Uhr
Hans
Library Walker
(Operator)



--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: