#include<stdio.h>
//原文ママ
#include<math.h>
double AttackerSuccessProbability(double q, int z)
{
double p = 1.0 - q;
double lambda = z * (q / p);
double sum = 1.0;
int i, k;
for (k = 0; k <= z; k++)
{
double poisson = exp(-lambda);
for (i = 1; i <= k; i++)
poisson *= lambda / i;
sum -= poisson * (1 - pow(q / p, z - k));
}
return sum;
}
//ここまで原文ママ
//ここから先が追加したmain関数
void main(int argc, char **argv){
double sumP;//表示されるP値
double qValue;//表示されるq値
int z=0;//表示されるz値
int num=0;//この値がz値のMAX
FILE *fp;//ファイル書き込み用
char *fname = "bitdata.csv";//ファイル名
if(argc!=3){ //エラー処理 引数が無い場合
printf("hikisu wo tuika site\n");
printf("./asProArgc 0.3 50\n");
return;
}
//引数の値を変数へ
//ここは数値チェックの箇所だが
//コードが長くなるのでエラー処理せず
sscanf(argv[1], "%lf", &qValue);
sscanf(argv[2], "%d", &num);
//ファイルへcsvにて書き込み準備
fp = fopen( fname, "w" );
if( fp == NULL ){//エラー処理
printf( "%s not file open\n", fname );
return;
}
for(z=0; z<=num; z++){
sumP= AttackerSuccessProbability(qValue,z);//関数に値を渡す
if(z%5==0){//z値が5の倍数で表示
printf("q=%2.2f z=%d Pro= %10.8f\n",qValue,z,sumP);
}
//ファイルへ書込み z値1刻み
fprintf( fp, "%d,%10.8f\n", z,sumP );
}
fclose( fp );//ファイル閉じる
}
//ここまで