home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource4 / 299_01 / test.c < prev    next >
Text File  |  1989-12-30  |  4KB  |  100 lines

  1. /****************************************************************************/
  2. /* test.c                                                                   */
  3. /* a driver for s_rand and d_rand                                           */
  4. /* in order to determine whether or not the function d_rand() in file       */
  5. /* random.c works on your hardware as compiled by your compiler do this:    */
  6. /*  compile test.c and random.c                                             */
  7. /*      link test.obj and random.obj to form test.exe                       */
  8. /*      execute test.exe                                                    */
  9. /* d_rand should work on 80X86 machines and other machines with             */
  10. /* long int of at least 4 bytes                                             */
  11. /* see the article referenced in rancom.c for details of implementations    */
  12. /* for smaller machines                                                     */
  13. /****************************************************************************/
  14.  
  15. #include<stdio.h>
  16. #include <stdlib.h>
  17. #include"random.h"
  18.  
  19.  
  20. void get_seed(void);
  21. void limits(double *,double *);
  22.  
  23. /****************************************************************************/
  24. /* main                                                                     */
  25. /****************************************************************************/
  26. int main()
  27. {
  28.    double dummy;
  29.    int i;
  30.  
  31.     printf("\nfor test of random number generator select a seed of 1\n");
  32.  
  33.    get_seed();
  34.  
  35.    limits(&u_limit,&l_limit);
  36.  
  37.     printf("now calculating 10,000 pseudorandom numbers\n");
  38.     
  39.    for(i=0;i<10000;i++){
  40.       dummy = d_rand();
  41.    }
  42.    printf("\nvalue of seed after 10,000 iterations is: %ld",seed);
  43.    printf("\nwith initial seed of 1, value should be:  1043618065\n");
  44.  
  45.     if(seed==1043618065)
  46.         printf("\npseudorandom number generator working properly");
  47.     else{
  48.         printf("\npseudorandom number generator not working properly");
  49.         printf("\nreview article in Communications of ACM for help");
  50.     }
  51. }
  52.  
  53. /****************************************************************************/
  54. /* get_seed                                                                 */
  55. /* this function asks for a number and uses it to seed rand()               */
  56. /****************************************************************************/
  57. void get_seed()
  58. {
  59.    char buff[10];
  60.    long int s;
  61.  
  62.    printf("Enter seed for pseudorandom number generator.\nDefault = 1\nseed: ");
  63.    s = atol(gets(buff));
  64.    if(s<1) s = 1;
  65.    s_seed(s);
  66.    printf("seed = %ld",s);
  67. }
  68.  
  69. /****************************************************************************/
  70. /* limits                                                                   */
  71. /* this function gets limits for d_random                                   */
  72. /****************************************************************************/
  73. void limits(
  74.    double *upper,
  75.    double *lower
  76. )
  77. {
  78.    char buff[10];
  79.  
  80.    printf("\nEnter range for pseudorandom numbers:\n");
  81.    printf("defaults:\n   upper limit = 1.0\n   lower limit = 0.0\n");
  82.    printf("enter upper limit: ");
  83.    *upper = atof(gets(buff));
  84.    printf("enter lower limit: ");
  85.    *lower = atof(gets(buff));
  86.    if(*lower>*upper){
  87.       printf("upper limit must be greater than lower limit; ");
  88.       printf("default selected\n");
  89.       *upper = 1.0;
  90.       *lower = 0.0;
  91.    }
  92.    if(*lower==*upper){
  93.       printf("default selected\n");
  94.       *upper = 1.0;
  95.       *lower = 0.0;
  96.    }
  97.    printf("upper limit = %4.2f\nlower limit = %4.2f\n",*upper,*lower);
  98. }
  99.  
  100.