📄 iidgauss.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 + -