Genauigkeit der arithmetischen Multiplikation
-
Hallo zusammen,
momentan stehe ich vor einem interessanten Problem. Mein Programm sieht wie folgt aus:
int main() { cout << "!!!Hello World!!!" << std::endl; // prints !!!Hello World!!! cout << (225 * 0.015625) << std::endl; }Die Ausgabe ist 3.51562, das richtig Ergebnis wäre aber 3.515625. Könnt ihr mir sagen wieso die letzte Ziffer fehlt?
Viele Grüße
MMEDIT: Falsches Sub-Forum, bitte nach C++ verschiebe, srry.
-
MrMilk schrieb:
Die Ausgabe ist 3.51562, das richtig Ergebnis wäre aber 3.515625. Könnt ihr mir sagen wieso die letzte Ziffer fehlt?
verwende mal double statt float
EDIT: Falsches Sub-Forum, bitte nach C++ verschiebe, srry.
das hat nichts mit der Sprache ansich zu tun ... das liegt an Deiner netten kleinen CPU die Du verwendest die kann das nicht ... versuch mal
cout << (0.2) << std::endl;hand, mogel
-
Hey,
da wird ganz normal 0.2 ausgegeben.
Sollte etwas besonderes passieren?Viele Grüße
MM
-
was sagt
... #include <iomanip> ... std::cout << std::setprecision(12) << 225 * 0.015625 << std::endl ;?
Mit der Standardpräzision wird die letzte Stelle bei mir auch verschluckt. So aber bekomme ich 3.515625 geliefert.
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Dazu kannst Du Dir auch noch die Wikipedia-Artikel zu Fließkommazahlen und der Maschinengenauigkeit angucken.
Gruß,
SP
-
Hey Sebastian Pizer und theHort,
vielen Dank für eure Hilfe. Den Artikel werde ich mir heute oder spätestes morgen früh durchlesen, je nachdem wie schnell das Papierchaos um mich herum weg ist

Viele Grüße
MM
-
Rundung bei der Ausgabe ist das, hat mit Maschinenungenauigkeit nichts zu tun. double (und du rechnest da auch mit double) hat ca. 17 signifikante Stellen.
Versuch mal
#include <iomanip> cout << setprecision(20) << /* dein Ausdruck */
-
MrMilk schrieb:
Den Artikel werde ich mir heute oder spätestes morgen früh durchlesen....
Bevor du dich hier auf's Glatteis führen lässt, pass voher einfach den Ausgabestream an, dann klappts auch mit der 5.

int main() { cout.precision( 7 ); cout << "!!!Hello World!!!" << std::endl; // prints !!!Hello World!!! cout << (225 * 0.015625) << std::endl; }http://www.cplusplus.com/reference/iostream/ios_base/precision/
-
@Bashar
Sorry, war zu langsam.