zurück Standard precision C++
Ich soll zur Kontrolle der Präzision für ein Doppelzimmer bei einem Vergleich, und dann kommen Sie wieder auf die default-Präzision mit C++.
Ich beabsichtige zu verwenden setPrecision()
zu setzen Präzision. Was ist denn die syntax, wenn vorhanden, legen Sie präzise auf Standard zurück?
Ich bin sowas
std::setPrecision(math.log10(m_FTOL));
Habe ich einige Sachen, und ich würde gerne wiederkommen, um Standard-Doppel-Vergleich direkt danach.
Modifizierte ich so, und ich habe noch einige Fehler
std::streamsize prec = std::ios_base::precision();
std::setprecision(cmath::log10(m_FTOL));
mit cmath
false bei der Zusammenstellung und std::ios_base
auch false bei der Zusammenstellung. Können Sie helfen?
Dank.
- Ist deine Antwort hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Präzision vor ändern Sie es, mit
std::ios_base::precision
und verwenden Sie dann, dass es zu ändern später zurück.Können Sie dies in Aktion zu sehen mit:
welche Ausgänge:
Den code oben zeigt zwei Möglichkeiten der Einstellung der Präzision, zuerst durch den Aufruf
std::cout.precision (N)
und zweitens durch die Verwendung einer stream-manipulatorstd::setprecision(N)
.Aber Sie müssen im Hinterkopf behalten, dass die Präzision ist für Ausgabe Werte über streams, es nicht direkt Einfluss auf die Vergleiche der Werte selbst mit code wie:
In anderen Worten, obwohl die Ausgabe kann
3.14159
, der Wert selbst ist immer noch das volle3.141592653590
(unter normalen floating-point-Einschränkungen natürlich).Wenn Sie das tun wollen, werden Sie brauchen, um zu überprüfen, ob es in der Nähe genug, statt sich gleich, mit einem code wie:
<iostream>
mit<fstream>
tunstd::ofstream ofs("output.txt", std::ofstream::out);
als erste Anweisung dermain
tunofs.close();
kurz vorreturn
, und ändern Sie allestd::cout
inofs
. Dieoutput.txt
Datei wird dann halten Sie genau das, was Sie sahen auf dem Bildschirm mit dem code in der Antwort.std::cout
mit derofstream
Bezeichner. Vielen Dank!Müssen Sie behalten den überblick über Ihre aktuellen Präzisions-und dann wieder auf die gleich noch einmal fertig mit Ihrem Betrieb, mit erforderlich veränderter Präzisions. Für diese können Sie verwenden,std::ios_base::Präzision:
Die erste syntax gibt den Wert der aktuellen floating-point-Präzision-Feld für den stream.
Die zweite syntax setzt auch auf einen neuen Wert.
setprecision() kann verwendet werden, nur für Ausgabe-Operationen und kann nicht verwendet werden für Vergleiche
Vergleichen Schwimmern sagen, a und b , müssen Sie es explizit so:
Speichern Sie den gesamten Staat mit
std::ios::copyfmt
Möchten Sie vielleicht auch, um die Wiederherstellung des ganzen vorherigen Zustand mit
std::ios::copyfmt
in diesen Fällen, wie bereits erläutert, in: Die Wiederherstellung des Zustandes von std::cout, nachdem Sie zu manipulierenmain.cpp
Kompilieren und ausführen:
Ausgabe:
Getestet auf Ubuntu 16.04, GCC 6.4.0.
Können Sie
cout << setprecision(-1)