mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			29 lines
		
	
	
		
			599 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			29 lines
		
	
	
		
			599 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include <stdlib.h>
							 | 
						||
| 
								 | 
							
								#include <math.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Generate gaussian random float with mean=0 and std_dev=1 */
							 | 
						||
| 
								 | 
							
								float gran_()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  float fac,rsq,v1,v2;
							 | 
						||
| 
								 | 
							
								  static float gset;
							 | 
						||
| 
								 | 
							
								  static int iset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if(iset){
							 | 
						||
| 
								 | 
							
								    /* Already got one */
							 | 
						||
| 
								 | 
							
								    iset = 0;
							 | 
						||
| 
								 | 
							
								    return gset;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  /* Generate two evenly distributed numbers between -1 and +1
							 | 
						||
| 
								 | 
							
								   * that are inside the unit circle
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  do {
							 | 
						||
| 
								 | 
							
								    v1 = 2.0 * (float)rand() / RAND_MAX - 1;
							 | 
						||
| 
								 | 
							
								    v2 = 2.0 * (float)rand() / RAND_MAX - 1;
							 | 
						||
| 
								 | 
							
								    rsq = v1*v1 + v2*v2;
							 | 
						||
| 
								 | 
							
								  } while(rsq >= 1.0 || rsq == 0.0);
							 | 
						||
| 
								 | 
							
								  fac = sqrt(-2.0*log(rsq)/rsq);
							 | 
						||
| 
								 | 
							
								  gset = v1*fac;
							 | 
						||
| 
								 | 
							
								  iset++;
							 | 
						||
| 
								 | 
							
								  return v2*fac;
							 | 
						||
| 
								 | 
							
								}
							 |