/*--------------------------------------------------------------------------------
ランダム・シャッフル・サロゲート法
Random Shuffle Surrogate (RSS) method
RSS.c
*--------------------------------------------------------------------------------*/
#include "RSS.h"
int main( void )
{
FILE *fo;
char filename[64];
int i, k;
int num;
unsigned long int seed;
double *data;
double *RSS;
if(( data = readdata( &num )) == NULL ) {
fputs( "# readdata error\n", stderr );
return -1;
}
/*--------------------------------------------------------------------------*/
RSS = malloc( (size_t)num * sizeof *RSS );
if ( RSS == NULL ) {
fputs( "# cannot allocate memory for RSS\n", stderr );
free( data );
return -1;
}
/*--------------------------------------------------------------------------*/
// 乱数の初期設定
// initialisation of random numbers
seed = SEED_RSS;
seed = (unsigned)time(NULL);
init_genrand( seed );
/*--------------------------------------------------------------------------*/
for ( k = 0; k < SURROGATE_DATA_NUM; k++ ) {
printf("\r# Now, generating the %dth RSS data", k+1);
fflush(stdout);
if ( generate_RSS( num, data, RSS ) != 0 ) {
fputs( "# cannot generate RSS data\n", stderr );
free( data );
free( RSS );
return -1;
}
snprintf( filename, sizeof filename, "RSS%02d.dat", k+1);
// snprintf( filename, sizeof filename, "RSS%03d.dat", k+1);
fo = fopen( filename, "w" );
if ( fo == NULL ) {
fprintf(stderr, "# cannot open %s\n", filename );
free( data );
free( RSS );
return -1;
}
fprintf(fo, "%d\n", num);
for(i = 0; i < num; i++){
fprintf(fo, "%.10f\n", RSS[i]);
// fprintf(fo, "%g\n", RSS[i]);
}
if ( fclose( fo ) != 0 ) {
fprintf(stderr, "# cannot close %s correctly\n", filename);
free( data );
free( RSS );
return -1;
}
}
free( data );
free( RSS );
return 0;
}