/* CSE2304, 2006, Semester 1 Random Pairs Generator for Prac2+3. Compile this code using the following Syntax gcc gen.c -o gen -lm */ #include #include #include void genRanNums( long seed, int nPairs, int nDivisions ) { double mid, length, left, right; int nDivision; if( nDivisions < 1 ) nDivisions = 1; if( nPairs < 0 ) nPairs = 0; srand48(seed); // set the seed of the pseudo-random number generator while( nPairs-- ) { do{ mid = drand48(); // 0.0 <= m mid < 1.0 for( nDivision = 0; nDivision < nDivisions-1; nDivision++ ) if( drand48() < 0.5 ) break; // nDivision biased to be small // nDivision < nDivisions length = (nDivision + drand48()) / nDivisions; // 0.0 <= length < 1.0, length is uniformly distributed... // ...in [nDivision/nDivisions, (nDivision+1)/nDivisions) left = mid-length/2.0, right = mid+length/2.0; }while( left >= right || left < 0.0 || right > 1.0 );//check limits // 0.0 <= left < right <= 1.0 printf("%f %f\n", left, right); } }//genRanRums main(int argc, char *argv[]) { if( argc != 4 ) { printf("gen seed nPairs nLengthDivisions\n"); printf("e.g. gen 117 5 3 gives...\n"); genRanNums(117, 5, 3); printf("NB. large nLengthDivisions => small average fragment length\n"); } else genRanNums(atol(argv[1]), atoi(argv[2]), atoi(argv[3])); }//main // Available under GNU General Public Licence (GPL) open-source licence. // L.Allison, Monash University, Melbourne, Vic, .au, 3/2006.