home *** CD-ROM | disk | FTP | other *** search
/ Encyclopedia of Graphics File Formats Companion / GFF_CD.ISO / formats / uray / code / random.c < prev    next >
C/C++ Source or Header  |  1994-06-20  |  3KB  |  80 lines

  1. /************************************************************************
  2.  *                                    *
  3.  *            Copyright (c) 1988, David B. Wecker            *
  4.  *                All Rights Reserved                *
  5.  *                                    *
  6.  * This file is part of DBW_uRAY                    *
  7.  *                                    *
  8.  * DBW_uRAY is distributed in the hope that it will be useful, but    *
  9.  * WITHOUT ANY WARRANTY. No author or distributor accepts        *
  10.  * responsibility to anyone for the consequences of using it or for    *
  11.  * whether it serves any particular purpose or works at all, unless    *
  12.  * he says so in writing. Refer to the DBW_uRAY General Public        *
  13.  * License for full details.                        *
  14.  *                                    *
  15.  * Everyone is granted permission to copy, modify and redistribute    *
  16.  * DBW_uRAY, but only under the conditions described in the        *
  17.  * DBW_uRAY General Public License. A copy of this license is        *
  18.  * supposed to have been given to you along with DBW_uRAY so you    *
  19.  * can know your rights and responsibilities. It should be in a file    *
  20.  * named LICENSE. Among other things, the copyright notice and this    *
  21.  * notice must be preserved on all copies.                *
  22.  ************************************************************************
  23.  *                                    *
  24.  * Authors:                                *
  25.  *    DBW - David B. Wecker                        *
  26.  *                                    *
  27.  * Versions:                                *
  28.  *    V1.0 881023 DBW    - First released version            *
  29.  *    V1.1 881110 DBW - Fixed scan coherence code            *
  30.  *    V1.2 881125 DBW - Removed ALL scan coherence code (useless)    *
  31.  *              added "fat" extent boxes            *
  32.  *    V1.3 881203 DBW - Fixed single precision TOLerances        *
  33.  *                                    *
  34.  ************************************************************************/
  35.  
  36. #include "uray.h"
  37.  
  38. /************************************************************************/
  39. /************ random number generator (see uray.h for random table ******/
  40. /************************************************************************/
  41.  
  42. /*
  43.  * srandom(x)    - sets a random seed starting point (long int)
  44.  * random()    - returns next random long int (between 0 and 0x7FFFFFFF)
  45.  * rnd()    - return next random FLTDBL (between 0 and 1)
  46.  */
  47.  
  48. srandom( x )
  49. unsigned x;
  50.     {
  51.     register  int i;
  52.  
  53.     /* rebuild the random table */
  54.     randtbl[ 0 ] = x;
  55.     for( i = 1; i < 63; i++ )
  56.     randtbl[i] = 1103515245*randtbl[i - 1] + 12345;
  57.  
  58.     fptr = &randtbl[ 1 ];
  59.     rptr = &randtbl[ 0 ];
  60.     }
  61.  
  62. long random()
  63.     {
  64.     long        i;
  65.     
  66.     *fptr += *rptr;
  67.     i = (*fptr >> 1)&0x7fffffff;    /* chucking least random bit */
  68.     if(  ++fptr  >=  end_ptr  )  {
  69.     fptr = randtbl;
  70.     ++rptr;
  71.     }
  72.     else  if(  ++rptr  >=  end_ptr  )  rptr = randtbl;
  73.     return( i );
  74.     }
  75.  
  76. FLTDBL rnd() {
  77.     return ((FLTDBL)random()) / 2147483647.0;
  78.     }
  79.  
  80.