⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iidgauss.c

📁 This program reads iid zero-mean unit-variance Gaussian variates
💻 C
字号:
#include <math.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/times.h>

#define PMODE 0644


/* This program generates N iid variates with normal distribution having
   mean and variance as requested. It averages K samples of iid variates 
   with uniform distribution between 0. and 1. To run the program use :

   	iidgauss <N> <mean> <variance> <K> <outfile>

   written by N. Moayeri, modified by D. Neuhoff 10/17/89            */

main(argc,argv)
int argc ;
char *argv[] ;

{  int i, j, k, n, m, fd ; 
   float  mean, variance, sum1, sum2 ;
   float x[BUFSIZ] ;
   double a, b, max, sum ;
   struct tms time_buf ;

   if ( argc != 6 ) {
	printf("usage: <# to gen.> <mean> <variance> <# to avg> <outfile>\n") ;
	exit(1) ;
	}
   n = atoi(argv[1]) ;
   mean = atof(argv[2]) ;
   variance = atof(argv[3]) ;
   k = atoi(argv[4]) ;
   if (( fd = creat(argv[5],PMODE )) == -1)
      {  printf("Error in creating the output file.\n") ;
         exit(1) ;
      }
   max = pow( 2.0 , 31.0 ) ;
   max -= 1.0 ;
   a = ( (float) k ) / 2. ;
   b = sqrt(12.*variance/k) ;
   i = 0 ;
   sum1 = 0  ;
   sum2 = 0 ;

   for ( m = 1; m <= n ; ++m ) {
	sum = 0. ;
        for ( j = 0; j < k; ++j )
		sum += rand() ;
	x[i] = (sum/max-a)*b + mean ;
   	sum1 += x[i] ;
	sum2 += x[i]*x[i] ;		
	if  ( ( (i+1) == BUFSIZ ) || ( m == n) ) {
		if ( ( j = write(fd,x,4*(i+1)) ) != ( 4 * (i+1) ) )  {
			printf("Error in writing onto the output file.\n") ;
			exit(1) ;
      			}
		i = -1 ;
		}
	i++ ;
	}
   printf("mean = %f  variance = %f\n",sum1/n, sum2/n - (sum1/n)*(sum1/n) ) ;	
   times(&time_buf) ;
   printf("user-time = %f   system-time = %f \n",time_buf.tms_utime/60.,
   	time_buf.tms_stime/60. ) ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -