📄 computehurst.cpp
字号:
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#include "ComputeHurst.h"
void SubFree(subseq *subseqhead, int subseqnum)
{
subseq *onesubseq;
subseq *freesubseq;
onesubseq=subseqhead;
while(onesubseq!=NULL)
{
freesubseq=onesubseq;
onesubseq=onesubseq->next;
free(freesubseq);
}
}
double Mean(subseq *subseqhead, int subseqnum)
{
double mean=0;
double add=0;
subseq *onesubseq;
for(onesubseq=subseqhead;onesubseq!=NULL;onesubseq=onesubseq->next)
{
add+=onesubseq->mean;
}
mean=add/subseqnum;
return mean;
}
double Variance(subseq *subseqhead, int subseqnum)
{
double var=0;
double add=0;
double mean=0;
mean=Mean(subseqhead,subseqnum);
printf("m':%d\tsubmean:%lf\n",subseqnum,mean);
subseq *onesubseq;
for(onesubseq=subseqhead;onesubseq!=NULL;onesubseq=onesubseq->next)
{
add+=onesubseq->mean*onesubseq->mean;
//add+=(onesubseq->mean-mean)*(onesubseq->mean-mean);
}
var=add/subseqnum-mean*mean;
/*if(subseqnum==73233)
{
printf("%lf\n",var);
}*/
SubFree(subseqhead,subseqnum);
return var;
}
data *SubMean(data *computedata,int m, subseq *onesubseq, int start)
{
double add=0;
for(int i=0;i<=m-1;i++)
{
add+=computedata->datavalue;
computedata=computedata->next;
}
/*if(m==3&&(start==0||start==1))
{
printf("add:%d\n", add);
}*/
onesubseq->mean=((double)add)/m;
/*if(m==3&&(start==0||start==1))
{
printf("mean:%lf\n", onesubseq->mean);
}*/
/*if(m==2)
{
printf("mean:%d\n", onesubseq->mean);
}*/
return computedata;
}
double VtPlot(data *computedata, int m, int subseqnum)
{
int i=0;
double logvar;
subseq *subseqhead;
subseq *onesubseq;
onesubseq=(subseq *)malloc(sizeof(subseq));
subseqhead=onesubseq;
while(i<=subseqnum-1)
{
if(i!=0)
{
onesubseq->next=(subseq *)malloc(sizeof(subseq));
onesubseq=onesubseq->next;
}
computedata=SubMean(computedata,m,onesubseq,i);
i++;
}
onesubseq->next=NULL;
/*int p=0;
for(onesubseq=subseqhead;onesubseq!=NULL;onesubseq=onesubseq->next)
{
printf("m:%d\tline:%d\toutm:%lf\n",m,p,onesubseq->mean);
p++;
}*/
logvar=log10(Variance(subseqhead,subseqnum));
return logvar;
}
void main()
{
FILE *fp1, *fp2, *fp3;
int datanum;
int subseqnum;
int m[44]={2,3,4,5,8,10,13,16,20,25,31,40,50,63,80,100,125,158,200,251,316,398,501,631,794,1000,1258,1585,1995,2512,3162,3981,5012,6309,7943,10000,12589,15849,19953,25119,31623,39811,50119,63096};
data *totaldata, *arpdata, *tcpdata, *udpdata;
data *totaldatahead, *arpdatahead, *tcpdatahead, *udpdatahead;
double logvartotal[46];
double logvararp[46];
double logvartcp[46];
double logvarudp[46];
double logm[46];
if((fp1=fopen("window0.1.dat","r"))==NULL)
{
printf("打不开文件\n");
}
totaldata=(data *)malloc(sizeof(data));
totaldatahead=totaldata;
arpdata=(data *)malloc(sizeof(data));
arpdatahead=arpdata;
tcpdata=(data *)malloc(sizeof(data));
tcpdatahead=tcpdata;
udpdata=(data *)malloc(sizeof(data));
udpdatahead=udpdata;
int i=0;
while(!feof(fp1))
{
if(i!=0)
{
totaldata->next=(data *)malloc(sizeof(data));
totaldata=totaldata->next;
arpdata->next=(data *)malloc(sizeof(data));
arpdata=arpdata->next;
tcpdata->next=(data *)malloc(sizeof(data));
tcpdata=tcpdata->next;
udpdata->next=(data *)malloc(sizeof(data));
udpdata=udpdata->next;
}
fscanf(fp1,"averagebps:%lf\tarppercent:%lf\ttcppercent:%lf\tudppercent:%lf\n",&totaldata->datavalue,&arpdata->datavalue,&tcpdata->datavalue,&udpdata->datavalue);
//printf("averagebps:%lf\tarppercent:%lf\ttcppercent:%lf\tudppercent:%lf\n",totaldata->datavalue,arpdata->datavalue,tcpdata->datavalue,udpdata->datavalue);
//fscanf(fp1, "TOTAL:%d\tARP:%d\tTCP:%d\tUDP:%d\n",&totaldata->datavalue,&arpdata->datavalue,&tcpdata->datavalue,&udpdata->datavalue);
//printf("line:%d\tTOTAL:%d\tARP:%d\tTCP:%d\tUDP:%d\n",i,totaldata->datavalue,arpdata->datavalue,tcpdata->datavalue,udpdata->datavalue);
i++;
}
totaldata->next=NULL;
arpdata->next=NULL;
tcpdata->next=NULL;
udpdata->next=NULL;
fclose(fp1);
datanum=i;
for(int j=0; j<=33; j++)
{
subseqnum=datanum/m[j];
logvartotal[j]=VtPlot(totaldatahead,m[j],subseqnum);
logvararp[j]=VtPlot(arpdatahead,m[j],subseqnum);
logvartcp[j]=VtPlot(tcpdatahead,m[j],subseqnum);
logvarudp[j]=VtPlot(udpdatahead,m[j],subseqnum);
logm[j]=log10((double)m[j]);
}
if((fp2=fopen("logV.txt","w"))==NULL)
{
printf("打不开文件\n");
}
if((fp3=fopen("logM.txt","w"))==NULL)
{
printf("打不开文件\n");
}
/*for(int p=0; p<=43; p++)
{
fprintf(fp2,"%lf\t",logvartotal[p]);
fprintf(fp2,"%lf\t",logvararp[p]);
fprintf(fp2,"%lf\t",logvartcp[p]);
fprintf(fp2,"%lf\n",logvarudp[p]);
}*/
for(int q=0; q<=43; q++)
{
fprintf(fp3,"%lf,",logm[q]);
}
/*for(int p=0; p<=43; p++)
{
fprintf(fp2,"%lf,",logvartotal[p]);
}
for(int p=0; p<=43; p++)
{
fprintf(fp2,"%lf,",logvararp[p]);
}
/*for(int p=0; p<=43; p++)
{
fprintf(fp2,"%lf,",logvartcp[p]);
}*/
for(int p=0; p<=43; p++)
{
fprintf(fp2,"%lf,",logvarudp[p]);
}
fflush(fp3);
fflush(fp2);
fclose(fp2);
fclose(fp3);
printf("OK!");
int y;
scanf("%d",&y);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -