Holen Sie sich den durchschnittlichen Wert aus einem Vektor von Integer-zahlen

Habe ich nicht in der Lage war einen Weg zu finden, immer der Durchschnittliche Wert aus einem Vektor von Integer-zahlen in C++.

Kann ich vielleicht beginnen Sie mit dem einfügen alle Werte, da könnte ich mehr als die maximale integer-Wert angenommen.

Wie kann ich berechnen, diese effizient und schnell ? Gibt es irgendwelche standard-Bibliotheken in der Sprache C++ zu tun ?

  • Könnten Sie die Akkumulation in einem double. Da die Durchschnittliche ganzer zahlen muss keine ganze Zahl, es scheint, Sie gehen zu müssen, um floating-point sowieso.
  • Dann nicht sich zu eine int (verwenden Sie eine uint64_t statt, zum Beispiel).
  • Ich habe einen richtig großen Vektor von 23 Mio zahlen, ich denke nicht, dass dieser Weg funktionieren würde. Gibt es nicht eine Möglichkeit, dies zu tun, andere als manuell ?
  • Hängt davon ab, wie viele es sind -, wenn die Summe geht über 2^53, dann double führen zu ungenauen Ergebnissen. (Limit für uint64_t ist 2^64.)
  • 23 Mio € ist wesentlich weniger als 2^64 / 2^32.
  • Was ist falsch mit std::accumulate( vector.begin(), vector.end(), 0.0) / vector.size();
  • Könnten Sie int64_t wenn der Vektor verfügt über 32-bit-Ganzzahlen. Wenn Sie 64-bit-Ganzzahlen, die Sie nutzen könnten __int128_t oder gleichwertig (vorausgesetzt, Ihr compiler bietet es).
  • Gemeinsame Jungs, wenn Sie zu tun haben durchschnittlich 1Mio zahlen, Veranstaltung mit langen (oder eher gesagt lange lange), er wird überlaufen. Und mit verdoppelt würde, er einen schrecklichen Verlust der Genauigkeit im Durchschnitt. Er muss wirklich etwas mehr...
  • 1 million wird nicht überlaufen (vorausgesetzt, wir meinen int durch "integer").
  • wäre er fügt 1 million von Ganzzahlen, die jeweils um MAX_INT/2 er wird sicherlich überlaufen...
  • Nicht, wenn akkumulieren in einer 64-bit-Typ (vorausgesetzt, die ursprünglichen Vektor enthält 32-bit-Werte).
  • 23 Millionen * int32_max passt problemlos in eine 64-bit-integer. Solange Sie nicht mehr als 4 Milliarden int (2^32 um genau zu sein) in den Vektor, der sich in eine int64_t wird gut tun.
  • Sie können auf jeden Fall tun, dass mit einer einfachen Formel so lange, wie Sie wissen, zählen der Elemente. Angenommen, ein Vektor ist eine. So Formel sein wird. S+= a[i]/n

InformationsquelleAutor dimitris93 | 2016-03-06
Schreibe einen Kommentar