Tilfældige ændringer af fortegn i en talrække

Tags:    c++

Hej udviklere,
jeg har prøvet at få et lille program til at køre, der skal tage mod en talrække af positive og negative tal, ændre fortegnene tilfældigt og udregne summen af talrækken. Programmet skal gentage operationen 4999 gange, og så oplyse til brugeren hvor stor en del af de dannede talrækker der har en større sum end den oprindelige. Det hele er led i en statistisk randomiserings test.
Jeg har siddet med det et stykke tid, og synes det lader til at problemet ligger i den algoritme der skifter fortegn på tallene i talrækken. Den ser sådan ud:
Fold kodeboks ind/udKode 


Når jeg kører programmet giver den værdien 0 for P i de fleste tilfælde, men i enkelte tilfælde værdien 1. Der er ikke tale om malplaceret afrunding, det er den numeriske værdi 0 eller 1.
Har I nogle forslag der kan hjælpe mig? Det ville være rigtig fedt!!

ps: hele programmet ligger her, hvis nu det skulle vise sig den reelle fejl lå andetsteds:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 08.03.2007 10:44 af Bruger #8249
5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Hvor er RAND_MAX defineret?
Og har du prøvet noget i retning af
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 10.03.2007 01:31 af Bruger #3789




Problemet ligger i fortegnene ikke? - Altså at rutinen ikke forstår at skabe henholdvis -1 i stedet for 0 og 1? :)

Jeg spørger fordi jeg ikke er så vild til det her, men lærer meget ved at analysere andres fejl8)





Indlæg senest redigeret d. 08.03.2007 10:59 af Bruger #8943
Hmm det tror jeg ikke...
P (altså mit output) er proportionen af gange hvor summen af en tilfældig talrække er større end summen af den oprindelige talrække, dvs. count/5000 hvor count tæller (S >= Sref).
Når jeg får 0 betyder det at alle tilfældige talrækker har været mindre end den oprindelige. Når jeg får 1 betyder det at alle tilfældige talrækker har været større eller (sandsynligvis) magen til den oprindelige.
Det får mig til at tænke at der er noget galt med den algoritme der ændrer talrækken.
Ideen er at indlæse en vector<int> ved navn differences, sådan: 2 -4 3 -5 2
Den har sum = 2-4+3-5+2= -2
så laver jeg 4999 tilfældige ændringer i fortegn:
-2 -4 3 5 2 ; -2 4 -3 5 -2; etc etc, udregner summen af hver, og tæller hvor mange gange den sum er større end -2.
Håber jeg fik forklaret det lidt klarere, tak for hurtig reaktion :-)



Indlæg senest redigeret d. 08.03.2007 11:25 af Bruger #8249
Det kokser for mig :D



Indlæg senest redigeret d. 10.03.2007 01:31 af Bruger #3789
t