算术编码用c语言实现
算术编码用c语言实现?(2010-07-07 23:43:59)转载标签:?杂谈描述:在source1.dat文件中有100个数据,其中,0的概率为1/8,1的概率为7/8.用算术编码进行压缩。程序如下://============================================================================// Name????????: suanshcoding.cpp// Author??????: 朗月清风// Version?????:1.0// Copyright???: All rights Reserved by 2010// Description : 从source1.dat文件中读取信息,即100个0、1码,完成算术编码,并给//???????????????出了译码及验证。// Department??:upc//============================================================================#include#include#define max 100void main(){?FILE *fp;?int i=0;?int n;?long double high;//上限?long double low;//下限?long double d;//间距?long double buf[max]; //大数组,暂存读取的数据?long double decode[max]; //存解码后的结果?int code[55];??//编码结果?long double temp;?long double hx;//总信息量?long double tp;//从区间取数?long double x=0.0; //存恢复的小数?long double line;//解码时判断准线//?char ch;??if((fp=fopen("f:\\source1.dat","r"))==NULL)?{??printf("open erro!\n");??//exit(0);?}?else?{?while (!feof(fp))?{??fscanf(fp,"%lf",&temp);??buf[i]=temp;????//?printf("%d--%lf\n",i,buf[i]);??i++;?}?}?//for(i=0;i1.0)??{???tp=tp-1;???code[j]=1;??}??else???code[j]=0;?}?printf("编码为:\n");//输出编码?for(i=0;ilow)&&(xline)??{???decode[i]=1.0;???low+=d*p0;??}??else??{???decode[i]=0.0;???high=low+d*p0;??//?d=high-low;??}??d=high-