rand() nicht shuffle genug
-
mahlzeit
folgendes
ich uebergeb der funktion rand() die zeit mit srand
denk das ist die typische herangehensweisenur wenn rand eine random zahl zwischen 1 und 10 bringen soll, dauert es schon sehr lange bis mal ne andere zahl rauskommt
es geht darum das es ein kleines programm ist was immer wieder neu gestartet wird
und dadurch faengt immer gleich an irgendwiekann man rand noch mehr shuffeln ?
m_minFiles = 1; m_maxFiles = 10; int number = RandomNumber( m_minFiles, m_maxFiles );int WALL::RandomNumber(int min, int max) { double number = ( ( (double) rand() / (double) RAND_MAX ) * max + min ); return ( (int)number +1 ); }die berechnung mit min/max hab ich mir aus der MSDN abgeschaut - "frueher" hatte ich immer mot modulo gearbeitet, wird aber das selbe ergeben
rand wird bei jeden programmlauf nur einmal aufgerufen direkt am start
-
Mr Evil schrieb:
ich uebergeb der funktion rand() die zeit mit srand
Dieser wirre Satz sieht im Code wie aus? Ich vermute da Unfug.
Deine Formel ist auch Mumpitz. Klappt so nur, wenn min 1 ist.
-
hab das nu so, weiss aber ne ob das nicht ein zu teures programm ist
int WALL::RandomNumber(int min, int max) { double count = ( ( (double) rand() / (double) RAND_MAX ) * 10 + 1 ); double number; for( int x=0; x<=(int) count; x++ ) number = ( ( (double) rand() / (double) RAND_MAX ) * max + min ); return ( (int)number +1 ); }'dazuedit
srand( (unsigned)time( NULL ) );so natuerlich, die formel hab ich direkt aus der MSDN kopiert, und min ist bei mir immer 1
'nochmal dazuedit
ok, das geht natuerlich auch, ist auch sinnvoller, so wirds mehr shuffle
int WALL::RandomNumber(int min, int max) { double number; for( int x=0; x<=3 ; x++ ) number = ( ( (double) rand() / (double) RAND_MAX ) * max + min ); return ( (int)number +1 ); }
-
Mr Evil schrieb:
srand( (unsigned)time( NULL ) );Und wie (vor allem: wie oft) wird das ausgeführt?
-
einmal direkt am start
genau wie rand
da es ein kleines programm ist, welches man oefter startet ist es notwendig das gleich das erste ergebnis je anders ist'dazuedit
wie ich schon sagte
es ist ein kleines programm
das wird einmal gestartet - holt ne shuffle zahl und beendet schon wieder
je nachdem wie man moechte ruft man das programm auf und nimmt sich ne neue zahldas kann manchmal nichtmal ne sekunde danach sein wo es zuerst bereits beendet ist, manchmal ne minute dazwischen und manchmal mehr
je nachdem
wenn ich das programm das erste mal aufruf, bekomm ich zb ne 6
dann ruf ich es gleich nochmal auf und bekomm wieder ne 6
10min spaeter dann bekomm ich erst ne andere zahlda halt die systemzeit an rand uebergeben wird, denk cih liegt es daran
hab das nu so geloest das ich rand absichtlich oft aufruf, damit bei den einen start die zahl immer anders ist - schon klappts
-
Ich hab' da mal an eine etwas abwegigere Möglichkeit gedacht:
#include <stdio.h> #include <stdlib.h> #include <time.h> int get_random_number( ) { srand( (unsigned int )( time( 0 ) ) + rand( ) ); return rand( ); } int main( ) { for( int i = 0; i < 100; ++i ) // simuliert deine Aufrufe schnell nacheinander printf( "%i, ", get_random_number( ) ); printf( "%i\n", get_random_number( ) ); }Greetz, Swordfish