Frage

Wie kann ich tun Mathe mit wesentlichen Zahlen in C ++? Ich möchte dies aus der Chemie und Physik Experimenten mit gemessenen Daten korrekt arbeiten. Ein Beispiel: 65/5 = 10. Ich muß nicht benötigter Dezimalstellen loszuwerden und ein paar Ziffern mit 0s ersetzen.

Danke!

War es hilfreich?

Lösung

Nun gibt es gute Mathematikbibliotheken in math.h

Speicher Auch Ihre Zahlen in Schwimmern, Doppel- oder lang Doppel für präzisere Operationen ermöglichen.

Floats bietet 7 signifikante Stellen, während Doppel 16 signifikante Stellen bieten.

Quelle

Auch wenn in der Regel Menschen Ausdrucken verwenden _snprintf oder printf und Sie können diese Doppel formatieren, die Schwimmer auf die Präzision, die Sie wie wollen:

  

Float Precision

     

printf ( "Wert% 8.2f", floatVariable);

     

Das sagt Sie insgesamt benötigen   Gebiet der 8 Zeichen innerhalb der 8   Zeichen der letzten 2 hält die   Dezimalteil.

     

_snprintf (Puffer, sizeof (Puffer), "Wert% .2f", floatVariable);

     

Das obige Beispiel   fordert die minimale Feldbreite und   die letzten beiden Stellen zu halten,   der Dezimalteil.

Andere Tipps

Das sollten Sie bekommen, was Sie brauchen:

std::cout.precision(x); // x would be the number of significant figures to output

Dies ist möglicherweise nicht der effizienteste Weg sein, aber Sie können ein benutzerdefinierten sig Abb Datentyp erstellen.

class SigFigFloat
{
  SigFigFloat(vector<short> digits, int decimalIndex, bool negative);
  SigFigFloat operator+(const SigFigFloat &value);
  SigFigFloat operator-(const SigFigFloat &value);
  //etc...


}

Es kann eine Menge Arbeit, aber wenn Sie dieses Recht umsetzen, kann es eine wirklich flexible Art und Weise darzustellen und zu tun Berechnungen mit sig Feigen sein.

Es ist schwer, weil signifikante Zahlen ein Dezimal-Konzept sind, und Computer sprechen binär. Sie können Dezimalzahl Klassen verwenden (ich weiß nicht, irgend) oder Verwendung boost :: Intervall , das ist in der Nähe zu dem, was Sie wollen auf jeden Fall erreichen.

Das hängt davon ab, wie Sie sie angezeigt werden. Wenn Sie die printf-Familie verwenden, stellen Sie die Genauigkeit (sprintf(buffer, "%.2f", myfloat)). Wenn Sie ostreams verwenden, rufen Sie die Präzision Funktion die Anzahl der Dezimalstellen festlegen. Wenn Sie für die weitere wissenschaftliche Methode der sig Feigen suchen, werden Sie müssen eine benutzerdefinierte Funktion schreiben, die die Genauigkeit bestimmt, basierend auf dem aktuellen Wert des Schwimmers.

hier ist eine schnelle C ++ 11-Lösung, die für mich gearbeitet:

int sig_figs = 3;
double number = 1562.654478;

std::cout << "original number:" << number << std::endl;

number = ([number](int number_of_sig_figs)->double{
    std::stringstream lStream;
    lStream << std::setprecision(number_of_sig_figs) << number;
    return std::stod(lStream.str());
})(sig_figs);

std::cout << "rounded number:" << number << std::endl;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top