blob: c7b886c491eb529ea251675985df00d823c445f6 [file] [log] [blame]
//Copyright (c) 2009 Princeton University
//Written by Christian Bienia
//Generate input files for blackscholes benchmark
#include <stdio.h>
#include <stdlib.h>
//Precision to use
#define fptype double
typedef struct OptionData_ {
fptype s; // spot price
fptype strike; // strike price
fptype r; // risk-free interest rate
fptype divq; // dividend rate
fptype v; // volatility
fptype t; // time to maturity or option expiration in years
// (1yr = 1.0, 6mos = 0.5, 3mos = 0.25, ..., etc)
const char *OptionType; // Option type. "P"=PUT, "C"=CALL
fptype divs; // dividend vals (not used in this test)
fptype DGrefval; // DerivaGem Reference Value
} OptionData;
//Total number of options in optionData.txt
#define MAX_OPTIONS 1000
OptionData data_init[] = {
#include "optionData.txt"
};
int main (int argc, char **argv) {
int numOptions;
char *fileName;
int rv;
int i;
if (argc != 3) {
printf("Usage:\n\t%s <numOptions> <fileName>\n", argv[0]);
exit(1);
}
numOptions = atoi(argv[1]);
fileName = argv[2];
if(numOptions < 1) {
printf("ERROR: Number of options must at least be 1.\n");
exit(1);
}
FILE *file;
file = fopen(fileName, "w");
if(file == NULL) {
printf("ERROR: Unable to open file `%s'.\n", fileName);
exit(1);
}
//write number of options
rv = fprintf(file, "%i\n", numOptions);
if(rv < 0) {
printf("ERROR: Unable to write to file `%s'.\n", fileName);
fclose(file);
exit(1);
}
//write values for options
for(i=0; i<numOptions; i++) {
//NOTE: DG RefValues specified exceed double precision, output will deviate
rv = fprintf(file, "%.2f %.2f %.4f %.2f %.2f %.2f %c %.2f %.18f\n", data_init[i % MAX_OPTIONS].s, data_init[i % MAX_OPTIONS].strike, data_init[i % MAX_OPTIONS].r, data_init[i % MAX_OPTIONS].divq, data_init[i % MAX_OPTIONS].v, data_init[i % MAX_OPTIONS].t, data_init[i % MAX_OPTIONS].OptionType[0], data_init[i % MAX_OPTIONS].divs, data_init[i % MAX_OPTIONS].DGrefval);
if(rv < 0) {
printf("ERROR: Unable to write to file `%s'.\n", fileName);
fclose(file);
exit(1);
}
}
rv = fclose(file);
if(rv != 0) {
printf("ERROR: Unable to close file `%s'.\n", fileName);
exit(1);
}
return 0;
}