#include <stdio.h>
#include <stdlib.h>
#include <time.h>
double rand_double(); /* 0.0 to 1.0, unif. dist. */
double rand_double2(double x, double y); /* x to y */
int rand_int(int a, int b); /* a to b, inclusive */
int main() {
int i,j,a,b,weather[5]={0,0,0,0,0};
time_t start;
double x, y;
double prob[4]={.2,.3,.5,.9};
int expected[5]={200,100,200,400,100};
double choice;
srand((long)(time(NULL))); /* initialize rand() */
printf("RAND_MAX: %i\n", RAND_MAX);
printf("*********Various Ranges*********\n");
for (i = 0; i < 3; i++)
printf("Random double, 0 to 1: %0.15f\n", rand_double());
printf("\n");
x = 2.0; y = 5.0;
for (i = 0; i < 3; i++)
printf("Random double, %.2f to %.2f: %0.15f\n", x, y, rand_double2(x, y));
printf("\n");
a = 2; b = 7;
for (i = 0; i < 3; i++)
printf("Random int, %i to %i: %i\n", a, b, rand_int(a, b));
printf("*********Now The Weather*********\n");
for (j=0;j<3;j++) {
choice=rand_double();
for (i=0;i<4;i++) {
if (choice<=prob[i])break;
}
printf("%0.15f %i\n",choice ,i);
switch (i) {
case 0:
printf("%s\n","Sunny");
break;
case 1:
printf("%s\n","Cloudy");
break;
case 2:
printf("%s\n","Ocasional Showers");
break;
case 3:
printf("%s\n","Rainy");
break;
case 4:
printf("%s\n","Storms");
break;
}
}
printf("\n***************1000 choices****************\n");
for (j=0;j<1000;j++) {
choice=rand_double();
for (i=0;i<4;i++) {
if (choice<=prob[i])break;
}
weather[i]++;
}
for (i=0;i<5;i++) {
printf("%i %i expected %i \n", i,weather[i],expected[i]);
}
printf("\n***************time calls*************\ntime(NULL) = ");
printf(" %ld seconds \n", time(NULL));
return 0;
}
double rand_double() {
return rand()/(double)RAND_MAX;
}
double rand_double2(double x, double y) {
return(y - x)*rand_double() + x;
}
int rand_int(int a, int b) {
return(int)((b - a + 1)*rand_double()) + a;
}
A Run
[siegelj@tc-login Random]$ random
RAND_MAX: 2147483647
*********Various Ranges*********
Random double, 0 to 1: 0.706519631532263
Random double, 0 to 1: 0.782058262164732
Random double, 0 to 1: 0.249282087315471
Random double, 2.00 to 5.00: 3.348258040541903
Random double, 2.00 to 5.00: 4.036708436457770
Random double, 2.00 to 5.00: 4.295788123875758
Random int, 2 to 7: 7
Random int, 2 to 7: 7
Random int, 2 to 7: 5
*********Now The Weather*********
0.850873881415871 3
Rainy
0.266367023003459 1
Cloudy
0.632309428710635 3
Rainy
***************1000 choices****************
0 195 expected 200
1 93 expected 100
2 209 expected 200
3 391 expected 400
4 112 expected 100
***************time calls*************
time(NULL) = 1478024230 seconds
[siegelj@tc-login Random]$