Tja - jeg startede med at kode en masse i VAX assembler i midten af 80'erne - og siden er det blevet til lidt Fortran, Pascal, C, C++, Visual Basic, Java gennem årene !
Mit problem er at jeg hvis jeg har en server proces og kører 10 klien processor hvori jeg bruger rand % så udvælger klienterne det samme tal, hvis du forstår?
lige en sidste ting... jeg undgå at skulle lave en while løkke for at indkredse srand(time(NULL)+getpid) til ikke at lave et tal der er større end fx 60?
MRG (lidt hurtigt tastet ind, så jeg garanterer ikke for korrektheden):
#include <stdio.h> #include <stdlib.h>
static unsigned long int seed[5];
void mysrand(unsigned long int ss[]) { seed[0]=ss[0]; seed[1]=ss[1]; seed[2]=ss[2]; seed[3]=ss[3]; seed[4]=ss[4]; return; }
unsigned long int myrand() { unsigned long int res; int i; res=(107374182*seed[0]+104480*seed[4])%2147483647; seed[4]=seed[3]; seed[3]=seed[2]; seed[2]=seed[1]; seed[1]=seed[0]; seed[0]=res; return res; }
int main(int argc,char *argv[]) { unsigned long int ss[5]; int i; ss[0]=1234567; ss[1]=123; ss[2]=4444; ss[3]=987; ss[4]=12321; mysrand(ss); for(i=0;i<10;i++) { printf("%ld\n",myrand()); } exit(0); }
Arne har nemmerlig fat i noget her. En "krydsning" af noget lineært (tiden - i hvert fald som den populært opfattes ;o) og noget cyklisk, nemlig proces-id. Dette vil i de fleste tilfælde være fint, og ellers kan man jo bare gå ud af en tangent med at finde på alskens underlige varianter af cykliske funktioner, trigonometriske funktioner, elliptiske, hyper-hvad-som-helst... men jeg har nu aldrig selv haft brug for noget i den stil... Du kan evt. osse checke "Numerical Recipes" for inspiration - jeg mener, der er en generator deri, men jeg kan ikke på stående fod huske det...
Ork jo. "Numerical Recipes i C" og de andre sprog indeholder kapitel 7: Random Numbers. Godt 50 sider inkl. opgaver for den interesserede læser... Geniale bøger, synes jeg.
Der er iøvrigt er firma i USA som sælger en ægte random generator: - en lava-lampe - et digital kamera som tager et billede af lampen - kode som læser dette billede i JPEG og udregner en hash sum af billedet
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.