Wer kann kann meinen Code straffen?
-
Was stimmt an der Wurzeloperation nicht?
Vermutlich die interne Typkonvertierung.
1/(anzahl-1)ergibt sicher 0, da ganzzahlig.
Versuch es mal so:
sigma=sqrt((1.0/(anzahl-1.0))*summs)Sind sigma und sumns vom Typ double oder float?
dann gibts da noch eine Bereichsabfrage die ich auch sehr unelegant finde
Es gibt schlimmeres.
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) 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.
-
Das wird wohl so sein wie es Tester2 sagt. Bei deinen Variablen wäre die Nutzung der ungarischen Notation hilfreich gewesen. Division durch Null knallt immer. Wenn du es mathematisch umgeformt hättest, dann hättest du dir den Spass mit 1/... sparen können und es so machen können:
if (iAnzahl-1) //gibt true wenn die Differenz ungleich null und damit die Division definiert ist { fSigma=sqrt(fSumms/(static_cast<float>(iAnzahl-1))); } else { //Behandlung des Falls iAnzahl-1=0 }
-
Da bringt die UN aber auch nichts, bei Division durch 0.0f kracht zwar nix, dafür ist das Ergebnis kaputt.
-
AndyDD schrieb:
Bei deinen Variablen wäre die Nutzung der ungarischen Notation hilfreich gewesen.
Mir wäre lieber die Deklaration gewesen, da die UN nicht jeder mehr kennt - ob man diese kriptischen Präfixe nun zusätzlich mitführt ist dabei egal.
-
Badestrand schrieb:
Da bringt die UN aber auch nichts, bei Division durch 0.0f kracht zwar nix, dafür ist das Ergebnis kaputt.
Sicher, aber es wäre ein Ansatz gewesen. Wenn du es aber abfängst, so wie ich es schemenhaft vorgeschlagen hab, dann ist doch das Ergebnis nicht kaputt. Davon mal abgesehen: wie willst du die Varianz von einem Zahlenwert ermitteln? Das wär ja eh Blödsinn...
-
Der ; ist im script vorhanden.
#include <cmath>
using namespace std; //hab ich gemachtdouble sigma;
double summs;
int anzahl;//ist eine Abfrage in der, der Benutzer die "anzahl" der Messwerte eingeben soll.
bis jetzt von mir immer größer 0 eingegeben.UN heißt wohl ungarische Notation möchte ich mir nicht aneigenen, ausser es wäre nötig.
-
@ ruth05:
Benutz doch bitte dieTags, dann kann man den Code auch lesen.
Solche Codestücke wie in deinem ersten Beiträge verleiten einige User hier dazu, sich gar nicht erst um dein Problem zu bemühen.
-
ich habe heute geschlagene 4 stunden meinen schwanz poliert
-
AndyDD schrieb:
Badestrand schrieb:
Da bringt die UN aber auch nichts, bei Division durch 0.0f kracht zwar nix, dafür ist das Ergebnis kaputt.
Sicher, aber es wäre ein Ansatz gewesen. Wenn du es aber abfängst, so wie ich es schemenhaft vorgeschlagen hab, dann ist doch das Ergebnis nicht kaputt.
Ich glaube, ich hatte dich auch falsch verstanden
Ich dachte du meintest, dass weil man nicht erkennt, dass (Anzahl-1) ein Ganzzahl-Wert ist, es dadurch krachen könnte. Und ich wollte eigentlich nur darauf hinaus, dass man vor jeder Division (außer sie ist eine sehr merkwürdige Operator-Überladung) auf !=0testen sollte, unabhängig vom Zahlen-Typ. In der Hinsicht hätte ich persönlich auch lieber, wenn eine Division durch 0.0f ebenso fatal wäre, wie eine Division durch int(0); ich hab schon oft genug und lange genug dran gesessen, den vermeintlichen Rechenfehler zu suchen, dabei hatte ich eben nicht jede Division abgecheckt. Und Rechnungen erfordern bei einem Divisor von 0 fast immer einen anderen Rechenweg, bei mir zumindest.

-
Badestrand schrieb:
Und ich wollte eigentlich nur darauf hinaus, dass man vor jeder Division (außer sie ist eine sehr merkwürdige Operator-Überladung) auf
!=0testen sollte, unabhängig vom Zahlen-Typ.Eventuell lohnt es sich auch, dafür eine Exception zu machen.