mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-29 20:10:28 -04:00 
			
		
		
		
	git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6561 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			102 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| #include <cmath>
 | |
| #include <algorithm>
 | |
| #include "Random.h"
 | |
| 
 | |
| void Random::bubbleSort(int a[], int size)
 | |
| {
 | |
|   for(int pass=1; pass<size; pass++) {
 | |
|     for(int i=0;i<size-pass;i++)
 | |
|       if(a[i]>a[i+1]){
 | |
| 	std::swap(a[i], a[i+1]);
 | |
|       }
 | |
|   }
 | |
| }
 | |
| 
 | |
| double Random::gauss(double sdev, double mean)
 | |
| { 
 | |
|   double sum=0.0;
 | |
|   for (int i=1;i<=12;++i)
 | |
|     { 
 | |
|       seed_u = 1664525lu * seed_u + 123456789lu; 
 | |
|       sum+=double(seed_u); 
 | |
|     }
 | |
|   return (sum/4.29497e9-6.0)*sdev+mean;
 | |
| }
 | |
| 
 | |
| double Random::uniform(double a, double b)
 | |
| {
 | |
|   double t;
 | |
|   for(int i=0; i<10;i++){
 | |
|     seed=2045*seed+1;
 | |
|     //seed=seed -(seed/1048576)*1048576;
 | |
|     seed%=1048576;
 | |
|   }
 | |
|   t=seed/1048576.0;
 | |
|   t=a+(b-a)*t;
 | |
|   return(t);
 | |
| }
 | |
| 
 | |
| int Random::uniform(int  a, int b) // [a, b-1]
 | |
| {
 | |
|   double t;
 | |
|   int i, tt;
 | |
|   if(b==a+1) return(a);
 | |
|   for(i=0; i<10;i++){
 | |
|     seed=2045*seed+1;
 | |
|     //seed=seed -(seed/1048576)*1048576;
 | |
|     seed%=1048576;
 | |
|   }
 | |
|   t=seed/1048576.0;
 | |
|   t=a+(b-a)*t;
 | |
|   tt=(int)t;
 | |
|   if(tt<a) tt=a;
 | |
|   else if(tt>=b) tt=b-1;
 | |
|   return(tt);
 | |
| }
 | |
| 
 | |
| int Random::nonUniform(int  a, int b) // [a, b-1]
 | |
| {
 | |
|   double t;
 | |
|   int i, tt;
 | |
|   if(b==a+1) return(a);
 | |
|   for(i=0; i<10;i++){
 | |
|     seed=2045*seed+1;
 | |
|     //seed=seed -(seed/1048576)*1048576;
 | |
|     seed%=1048576;
 | |
|   }
 | |
|   t=seed/1048576.0;
 | |
|   t=a+(b-a)*pow(t, 0.6667); //t^1.5 
 | |
|   tt=(int)t;
 | |
|   if(tt<a) tt=a;
 | |
|   else if(tt>=b) tt=b-1;
 | |
|   return(tt);
 | |
| }
 | |
| 
 | |
| /*
 | |
| void m_uniform(int a , int b, long int *seed, int *itmp, int num)
 | |
| {
 | |
|   int index, imed, i, k;
 | |
| 
 | |
|   index=0;
 | |
|   itmp[0]=uniform(a, b, seed);
 | |
|  Loop1:
 | |
|   imed=uniform(a, b, seed);
 | |
|   k=0;
 | |
|   for(i=0;i<=index;i++)
 | |
|     if(imed==itmp[i]) {k=1; break;}
 | |
|   if(k==0) {index++; itmp[index]=imed;}
 | |
|   if(index<num-1) goto Loop1;
 | |
|   bubble(itmp, num); //bubble sorting
 | |
| }
 | |
| */
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |