Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Variablen / Cout Probleme ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
08.03.2006, 14:32 Uhr
~flappinski
Gast


Hallo Leute,
ich habe ein merkwürdiges Problem, dem ich einfach nicht auf die Schliche komme. Folgende kleine Funktion errechnet eine p-Wert-ANOVA aus übergebenen Vektoren:


Bearbeitung von Pler:

Quellcode auf Anfrage des Autors entfernt. (Archiv Post www.fun-soft.de/showtopic.php?threadid=14516, nur für Moderatoren)



wenn ich beispielsweise die Kontroll-Ausgabe der Mittelwertes (mit *** gekennzeichnet) anschalte, gibt die Funktion die richtigen p-Werte raus. Wenn sie nicht angeschaltet sind, dann gibt es "nan".
Hat da jemand eine Idee???
Schöne Grüsse,
Stephan


Bearbeitung von mod:

Tags berichtigt


Dieser Post wurde am 08.03.2006 um 18:30 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.03.2006, 14:44 Uhr
flappinski



Ich habe eine (Teil-) Antwort gefunden. Wenn ich die Optimierung ausschalte, bzw. auf -O1 runter gehe, funktioniert alles prima. Ist aber schade, die Performance spielt eine Riesenrolle bei der ganzen Geschichte....
Vielleicht fällt ja noch jemand was ein. (ach ja: g++ 4.0.2)
Gruss,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.03.2006, 15:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenns auf speed ankommt, warum nimmste dann vector?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.03.2006, 15:54 Uhr
virtual
Sexiest Bit alive
(Operator)


@flosoft
Wieso soll ein vector<double> ein Performanceminderungsgrund sein? - Wenn flappinski ein reserve Spendiert, sollte alles in Butter sein.

@flappinski
Ich würde in erster Näherung ein

C++:
[b]volatile[/b] vector <double> mean_mine;


machen, damit der compiler nicht unsinnige Optimierungen macht. Ggf. noch andere stellen entsprechend anpassen. (Mehr zu volatile hier)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.03.2006, 16:14 Uhr
flappinski



halo virtual,
vielen Dank für die Antwort. Das war das, wonach ich gesucht habe, denn der Rest des programms lief mit der Optimierung problemlos. Allerdings funktionert volatile nicht, ich erhalte folgende Fehlermeldung (lass dich durch die blöden Sonderzeichen nicht stören, die erscheinen bei mir natürlich nicht so):

In function $-1òødouble ANOVA_TEST_3(std::vector<double,
std::allocator<double> >*)òù:
error: passing $-1òøvolatile std::vector<double,
std::allocator<double> >òù as òøthisòù argument of òøvoid
std::vector<_Tp, _Alloc>::push_back(const _Tp& [with _Tp = double,
_Alloc = std::allocator<double>]òù discards qualifiers


Muss ich noch irgendwelche header einbinden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.03.2006, 16:35 Uhr
virtual
Sexiest Bit alive
(Operator)


Tja, das ist traurig.
Dann bleibt Dir wohl nur, die gesamt Funktion volatile zu machen:

C++:
volatile double ANOVA_TEST_3(vector<double> col[]){ ... }


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.03.2006, 16:45 Uhr
flappinski



auch leider nur fast!!!
jetzt wird zwar ohne Beanstandung kompiliert, aber leider gibt es jetzt wieder diese blöden nan`s, also muss ich wieder mit der Optimiertung runter, also kein Unterschied zu ohne volatile....
p.s. kann jemand den source-code da oben von mir runter nehmen? ich habe das als noch nicht registriertes Mitglied gepostet, und irgendwie hätte ich das gerne doch für mich behalten....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.03.2006, 17:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


probier mal ein "double mean_mine[3]" aus, und dann statt push_back ein =
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
08.03.2006, 17:47 Uhr
flappinski



Hi Flosoft,
da hast Du natürlich Recht, da ist ein vector eigentlich nicht angebracht, das kam noch von der Überlegung, verschiedenanzahlige Datenreihen einzsetzen, was ich hier tatsächlich nicht mache. Also habe ich ein Array gebastelt, wie Du gesagt hast und siehe da: Es wird schlimmer, jetzt kommen die nan`s schon bei der Optimierung -O1. Und volatile bringt hier auch an keiner Stelle was (komisch, oder?)! Mit dem Vector konnte ich wenigstens O1 einstellen...
Alles schleierhaft...und traurig....
Gruss,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
08.03.2006, 18:38 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Ansonsten, vielleicht liegt dein Fehler ja nicht in der geposteten Funktion. Du übergibst ja 2 double-vectoren an eine "calc_mean" evtl pfuscht die im speicher der Vektoren rum, oder du übergibst die nicht als referenz o.ä

vielleicht macht dir auch dein "dynamisches festgelegtes" array probleme

Probier evtl deine Funktion neu zu schreiben, vielleicht fällt dir dann dein Fehler auf oder er ist einfach weg.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: