void FatalError(const char * ErrorText) { // This function outputs an error message and aborts the program. // Important: There is no universally portable way of outputting an // error message. You may have to modify this function to output // the error message in a way that is appropriate for your system. // Check if FatalAppExit exists (this macro is defined in winbase.h) #ifdef FatalAppExit // in Windows, use FatalAppExit: FatalAppExit(0, ErrorText); #else // in console mode, print error message printf ("\n%s\n", ErrorText); EndOfProgram(); #endif // Terminate program with error code exit(1); }
int main() { int seed = (int)time(0); // random seed // choose one of the random number generators: CRandomMersenne RanGen(seed); // make instance of random number generator int i; // loop counter int ir; // random integer number double fr; // random floating point number // make random integers in interval from 0 to 99, inclusive: printf("\n\nRandom integers in interval from 0 to 99:\n"); for (i = 0; i < 40; i++) { ir = RanGen.IRandom(0,99); printf ("%6i ", ir); } // make random floating point numbers in interval from 0 to 1: printf("\n\nRandom floating point numbers in interval from 0 to 1:\n"); for (i = 0; i < 32; i++) { fr = RanGen.Random(); printf ("%8.6f ", fr); } // make random bits printf("\n\nRandom bits (hexadecimal):\n"); for (i = 0; i < 32; i++) { ir = RanGen.BRandom(); printf ("%08lX ", ir); } EndOfProgram(); // system-specific exit code return 0; }
int main () { // define constants const int nmin = 1; // set the lowest allowed number const int nmax = 36; // set the highest allowed number const int select = 6; // the number of numbers to draw int32 seed = time(0); // generate random seed StochasticLib1 sto(seed); // make instance of random library int urn[nmax-nmin+1]; // contains the shuffled numbers int i; // loop counter // Make shuffled list of numbers from nmin to nmax: sto.Shuffle(urn, nmin, nmax-nmin+1); // output heading text printf("Random numbers without duplicates:\n\n"); // loop to output the first "select" numbers for (i=0; i < select; i++) { if (i < nmax-nmin+1) { // output number printf("%4i ", urn[i]);}} EndOfProgram(); // system-specific exit code return 0;}
int main() { // Make an object of the template class. The names inside <> define the // class names of the two random number generators to combine. // Use time as seed. int seed = (int)time(0); int i; // Declare object of combined generator TRandomCombined<CRandomMersenne,CRandomMother> RG(seed); for (i = 0; i < 20; i++) { // generate 20 random floating point numbers and 20 random integers printf("\n%14.10f %2i", RG.Random(), RG.IRandom(0,99)); } printf("\n"); EndOfProgram(); return 0; }
int main() { int32 seed = time(0); // random seed // choose one of the random number generators: TRandomMersenne rg(seed); // make instance of random number generator // or: // TRanrotWGenerator rg(seed); // make instance of random number generator // or: // TRandomMotherOfAll rg(seed); // make instance of random number generator int i; // loop counter double r; // random number int32 ir; // random integer number // make random integers in interval from 0 to 99, inclusive: printf("\n\nRandom integers in interval from 0 to 99:\n"); for (i=0; i<40; i++) { ir = rg.IRandom(0,99); printf ("%6li ", ir); } // make random floating point numbers in interval from 0 to 1: printf("\n\nRandom floating point numbers in interval from 0 to 1:\n"); for (i=0; i<32; i++) { r = rg.Random(); printf ("%8.6f ", r); } // make random bits (Not for TRandomMotherOfAll): printf("\n\nRandom bits (hexadecimal):\n"); for (i=0; i<32; i++) { ir = rg.BRandom(); printf ("%08lX ", ir); } EndOfProgram(); // system-specific exit code return 0; }
int main () { int seed = (int)time(0); // generate random seed StochasticLib1 sto(seed); // make instance of random library int deck[52]; // deck of 52 cards const char * ColorNames[] = { // names of 4 colors "clubs", "diamonds", "hearts", "spades" }; const char * ValueNames[] = { // names of 13 card values "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; int i; // loop counter int color; // card color int value; // card value // Make shuffled list of cards. // The 52 cards are numbered from 0 to 51, where 0 = A-clubs, 1 = A-diamonds, // 51 = K-spades: sto.Shuffle(deck, 0, 52); // output heading text printf("Shuffled deck of cards:\n\n"); // loop for all cards for (i = 0; i < 52; i++) { // translate card number into color and value color = deck[i] % 4; value = deck[i] / 4; // output card printf("%8s %2s ", ColorNames[color], ValueNames[value]); // make linefeed for every four cards if (i % 4 == 3) printf("\n"); } EndOfProgram(); // system-specific exit code return 0; }
// main int main() { // parameters. You may change these int32 n = 10; // number of balls double p = 0.4; // probability int32 nn = 1000000; // number of samples // other variables double sum; // sum double ssum; // squaresum int32 min, max; // minimum, maximum double mean; // mean double var; // variance int32 i; // loop counter int32 x; // random variate const int DSIZE = 18; // size of array int32 dis[DSIZE] = {0}; // number of samples in each range int c; // index into dis list double f; // calculated function value double xme; // expected mean double xva; // expected variance double xsd; // expected standard deviation int32 delta; // step in list int32 xa; // list minimum int32 x1, x2; // category range // make random library int32 seed = time(0); // random seed StochasticLib1 sto(seed); // make instance of random library // calculate mean and variance xme = n*p; // calculated mean xva = n*p*(1-p); // calculated variance // calculate appropriate list divisions xsd = sqrt(xva); // calculated std.dev. xa = int(xme - 6.*xsd + 0.5); // calculated minimum if (xa < 0) xa=0; delta = int(12.*xsd/(DSIZE-1)); // list step if (delta < 1) delta = 1; // initialize sum = ssum = 0; min = 2000000000; max = -1; // start message printf("taking %li samples from binomial distribution...", nn); // sample nn times for (i=0; i < nn; i++) { // generate random number with desired distribution x = sto.Binomial(n,p); // update sums sum += x; ssum += (double)x*x; if (x < min) min = x; if (x > max) max = x; c = (x-xa)/delta; if (c < 0) c = 0; if (c >= DSIZE) c = DSIZE-1; dis[c]++;} // calculate sampled mean and variance mean = sum / nn; var = (ssum - sum*sum/nn) / nn; // print sampled and theoretical mean and variance printf("\n\nparameters: n=%li, p=%.3G", n, p); printf("\n mean variance"); printf("\nsampled: %12.6f %12.6f", mean, var); printf("\nexpected: %12.6f %12.6f", xme, xva); // print found and expected frequencies printf("\n\n x found expected"); for (c = 0; c < DSIZE; c++) { x1 = c*delta + xa; if (x1 > n) break; x2 = x1+delta-1; if (c==0 && min<x1) x1 = min; if (c==DSIZE-1 && max>x2) x2 = max; if (x2 > n) x2 = n; // calculate expected frequency for (x=x1, f=0.; x <= x2; x++) { f += exp(LnFac(n) - LnFac(x) - LnFac(n-x) + x*log(p) + (n-x)*log(1-p));} // output found and expected frequency if (dis[c] || f*nn > 1E-4) { if (x1==x2) { printf("\n%7li %12.6f %12.6f", x1, (double)dis[c]/nn, f);} else { printf("\n%6li-%-6li %12.6f %12.6f", x1, x2, (double)dis[c]/nn, f);}}} EndOfProgram(); // system-specific exit code return 0;}
// main int main() { // hypergeometric parameters. You may change these int32_t n = 600; // number of balls taken int32_t m = 400; // number of red balls int32_t N = 1000; // total number of balls double omega = 3; // odds int32_t nn = 100000; // number of samples // other variables double sum; // sum double ssum; // squaresum int32_t min, max; // minimum, maximum double mean; // mean double var; // variance int32_t i; // loop counter int32_t x; // random variable const int DSIZE = 18; // size of array int32_t dis[DSIZE] = {0}; // number of samples in each range int c; // index into dis list double f; // calculated function value double xme1; // expected mean (approximate) double xme2; // expected mean (exact) double xva; // expected variance double xsd; // expected standard deviation int32_t delta; // step size in list int32_t xa, xb; // list minimum, maximum int32_t x1, x2; // category range // make random seed int32_t seed = (int32_t)time(0); // random seed = time // make instance of random library for producing random variates StochasticLib3 sto(seed); // make object for calculating mean, variance and probabilities CWalleniusNCHypergeometric nchyp(n, m, N, omega, 1E-10f); // calculate approximate mean xme1 = nchyp.mean(); // calculate exact mean and variance, and check precision sum = nchyp.moments(&xme2, &xva); // printf("obtained precision %.4G\n", sum-1.); // calculate appropriate list divisions xsd = sqrt(xva); // std.deviation xa = int(xme2 - 6.*xsd + 0.5); // expected minimum if (xa < 0) xa=0; if (xa < n+m-N) xa = n+m-N; delta = int(12.*xsd/(DSIZE-1)); // list step if (delta < 1) delta=1; xb = xa + (DSIZE-1)*delta; // expected maximum if (xb > n) xb = n; if (xb > m) xb = m; // initialize sum = ssum = 0; min = 2000000000; max = -1; // start message printf("taking %li samples from Wallenius noncentral hypergeometric distribution...", nn); // sample nn times for (i = 0; i < nn; i++) { // generate random number with desired distribution x = sto.WalleniusNCHyp(n, m, N, omega); // update sums sum += x; ssum += (double)x*x; if (x < min) min = x; if (x > max) max = x; c = (x-xa)/delta; if (c < 0) c = 0; if (c >= DSIZE) c = DSIZE-1; dis[c]++; } // calculate sampled mean and variance mean = sum / nn; var = (ssum - sum*sum/nn) / nn; // print sampled and theoretical mean and variance printf("\n\nparameters: n=%li, m=%li, N=%li, odds=%.3G", n, m, N, omega); printf("\n mean variance"); printf("\nsampled: %12.6f %12.6f", mean, var); printf("\nexpected: %12.6f %12.6f", xme2, xva); // print found and expected frequencies printf("\n\n x found expected"); for (c = 0; c < DSIZE; c++) { x1 = c*delta + xa; if (x1 > xb) break; x2 = x1+delta-1; if (x2 > xb) x2 = xb; if (c==0 && min<x1) x1 = min; if (c==DSIZE-1 && max>x2) x2 = max; // calculate expected frequency for (x=x1, f=0.; x <= x2; x++) { f += nchyp.probability(x); } if (dis[c] || f*nn > 1E-4) { if (x1==x2) { printf("\n%7li %12.6f %12.6f", x1, (double)dis[c]/nn, f); } else { printf("\n%6li-%-6li %12.6f %12.6f", x1, x2, (double)dis[c]/nn, f); } } } EndOfProgram(); // system-specific exit code return 0; }