Random.cpp
上传用户:mgf822
上传日期:2013-10-03
资源大小:133k
文件大小:2k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. #include <malloc.h>
  2. #include "random.h"
  3. RndGen::~RndGen()
  4. if (oldrand)
  5. free(oldrand); 
  6. }
  7. void RndGen::init_random(const float randomseed)
  8. {
  9.     float new_random  = 1.0e-9f;
  10.     float prev_random = randomseed;        
  11.     oldrand = (float*)calloc(55, sizeof(float));        
  12.     oldrand[54] = randomseed;        
  13.     for (int i = 0; i < 53; i ++)        
  14.     {                
  15. int j = (21 * (i + 1)) % 55;                
  16.         oldrand[j] = new_random;                
  17.         new_random = prev_random - new_random;                
  18.         if (new_random < 0) new_random ++;                
  19. prev_random = oldrand[j];        
  20. }        
  21.         
  22.     advance_random();        
  23.     advance_random();        
  24.     advance_random();        
  25.     n = 0;
  26. }
  27. void RndGen::advance_random()
  28. {    
  29.     float   new_random;             
  30.     for (int i = 0; i <= 23; i ++)        
  31.     {               
  32.         new_random = oldrand[i] - oldrand[i+31];              
  33.         if (new_random < 0) 
  34. new_random ++;               
  35.         oldrand[i] = new_random;       
  36.     }               
  37.         
  38.     for (i = 24; i <= 54; i ++) 
  39.     {               
  40.         new_random = oldrand[i] - oldrand[i-24];              
  41.         if (new_random < 0)
  42. new_random ++;               
  43.         oldrand[i] = new_random;       
  44.     }
  45. }
  46. float RndGen::randm()
  47. {             
  48. n ++;                
  49. if (n > 54)         
  50. {                       
  51. n = 1;                      
  52. advance_random();               
  53. }                               
  54. return oldrand[n];
  55. }