Rationalize random number seeding in C and Fortran

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6272 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2015-12-14 19:40:44 +00:00
parent cc6ed82f9a
commit 6be4f3d376
10 changed files with 34 additions and 26 deletions

View File

@ -336,6 +336,7 @@ set (wsjt_FSRCS
lib/hspec.f90
lib/image.f90
lib/indexx.f90
lib/init_random_seed.f90
lib/interleave4.f90
lib/interleave63.f90
lib/interleave9.f90
@ -417,6 +418,7 @@ set (wsjt_CSRCS
lib/ftrsd/ftrsd2.c
lib/gran.c
lib/igray.c
lib/init_random_seed.c
lib/wsprd/nhash.c
lib/tab.c
lib/tmoonsub.c
@ -446,6 +448,7 @@ set (wsprd_CSRCS
lib/wsprd/fano.c
lib/wsprd/tab.c
lib/wsprd/nhash.c
lib/init_random_seed.c
)
set (wsjtx_UISRCS

View File

@ -17,6 +17,8 @@ program code426
call getarg(2,arg)
read(arg,*) iters
call init_random_seed()
open(13,file='code426.out',status='unknown')
write(*,1002) nmsgs,iters

View File

@ -45,6 +45,8 @@ program jt4sim
freq=f0 !Silence compiler warning
dphi=0.0 !Silence compiler warning
call init_random_seed()
h=default_header(12000,npts)
if(message(1:3).eq.'sin') read(message(4:),*) sinfreq

View File

@ -35,6 +35,8 @@ program jt65sim
go to 999
endif
call init_random_seed(1)
csubmode='A'
call getarg(1,csubmode)
mode65=1
@ -62,9 +64,6 @@ program jt65sim
h=default_header(12000,npts)
dfsig=2000.0/nsigs !Freq spacing between sigs in file (Hz)
! generate new random number seed for each run using /dev/urandom on linux and os x
! nerr=sgran()
do ifile=1,nfiles !Loop over requested number of files
write(fname,1002) ifile !Output filename
1002 format('000000_',i4.4)

View File

@ -17,6 +17,7 @@ Information-carrying channel symbols
#include <time.h>
#include <string.h>
#include "rs.h"
#include "init_random_seed.h"
static void *rs;
@ -35,6 +36,8 @@ int main(){
int mrsym[63],mrprob[63],mr2sym[63],mr2prob[63];
int nsec2,ncount,dat4[12];
init_random_seed();
datfile=fopen("kvasd.dat","rb");
if( !datfile ) {
printf("Unable to open kvasd.dat\n");
@ -96,11 +99,11 @@ int main(){
printf("num_errors = %d\n",num_errors);
for( i=0; i<num_errors; i++) {
do {
errval = random() & nn;
errval = rand() & nn;
} while(errval == 0); //generate random
do {
errloc = random() % nn;
errloc = rand() % nn;
} while(errlocs[errloc]!=0);
errlocs[errloc] = errval;

View File

@ -20,6 +20,7 @@
#include <time.h>
#include <string.h>
#include "rs.h"
#include "init_random_seed.h"
static void *rs;
@ -175,12 +176,9 @@ int main(int argc, char *argv[]){
// "soft" distance between each codeword and the received word is
// used to decide which codeword is "best".
//
// srandom(time(NULL));
#ifdef WIN32
srand(0xdeadbeef);
#else
srandom(0xdeadbeef);
#endif
init_random_seed();
float p_erase;
int thresh, nsum;
ncandidates=0;
@ -207,11 +205,7 @@ int main(int argc, char *argv[]){
}
thresh = p_erase*100;
long int ir;
#ifdef WIN32
ir=rand();
#else
ir=random();
#endif
if( ((ir % 100) < thresh ) && numera < 51 ) {
era_pos[numera]=indexes[62-i];
numera=numera+1;

View File

@ -1,15 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "init_random_seed.h"
/* seed rand using urandom */
/* seed rand */
float sgran_()
{
unsigned int seed;
FILE *urandom;
urandom = fopen ("/dev/urandom","r");
fread (&seed, sizeof (seed), 1, urandom);
srand (seed);
init_random_seed();
return(0);
}

View File

@ -23,6 +23,7 @@ program t1
call getarg(3,arg)
read(arg,*) iters
call init_random_seed()
call random_number(r)
itone=0
where(r.gt.0.5) itone=1

View File

@ -0,0 +1,8 @@
program test_init_random_seed
real :: r(10,4)
call init_random_seed()
call random_number(r)
do i =1,10
write (*, *) (r(i,j),j=1,4)
end do
end program test_init_random_seed

View File

@ -40,6 +40,7 @@
#include "nhash.h"
#include "wsprd_utils.h"
#include "wsprsim_utils.h"
#include "lib/init_random_seed.h"
#define max(x,y) ((x) > (y) ? (x) : (y))
// Possible PATIENCE options: FFTW_ESTIMATE, FFTW_ESTIMATE_PATIENT,
@ -614,7 +615,9 @@ int main(int argc, char *argv[])
memset(allcalls,0,sizeof(char)*100*13);
int uniques=0, noprint=0;
init_random_seed();
// Parameters used for performance-tuning:
maxcycles=10000; //Fano timeout limit
double minsync1=0.10; //First sync limit