欢迎来到天天文库
浏览记录
ID:16078201
大小:109.28 KB
页数:5页
时间:2018-08-07
《算术编码用c语言实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、算术编码用c语言实现 (2010-07-0723:43:59)转载标签: 杂谈描述:在source1.dat文件中有100个数据,其中,0的概率为1/8,1的概率为7/8.用算术编码进行压缩。程序如下://============================================================================//Name :suanshcoding.cpp//Author :朗月清风//Version :1.0//Copyright :Allrigh
2、tsReservedby2010//Description:从source1.dat文件中读取信息,即100个0、1码,完成算术编码,并给// 出了译码及验证。//Department :upc//============================================================================#include#include#definemax100voidmain(){ FILE*fp; inti=0; intn
3、; longdoublehigh;//上限 longdoublelow;//下限 longdoubled;//间距 longdoublebuf[max];//大数组,暂存读取的数据 longdoubledecode[max];//存解码后的结果 intcode[55]; //编码结果 longdoubletemp; longdoublehx;//总信息量 longdoubletp;//从区间取数 longdoublex=0.0;//存恢复的小数 longdoubleline;//解码时判断准线// charch; if((fp=
4、fopen("f:\source1.dat","r"))==NULL) { printf("openerro!"); //exit(0); } else { while(!feof(fp)) { fscanf(fp,"%lf",&temp); buf[i]=temp; // printf("%d--%lf",i,buf[i]); i++; } } //for(i=0;i5、0/8;//1的概率 low=0.0; high=1.0; d=1.0; for(i=0;i6、x+1; //需编码位数 printf("至少需要%d位编码",n); printf("下限是:%.17f下限是:%.17f",low,high);tp=(low+high)/2.0;//取区间的中点编码printf("选取的小数为:%.17f",tp); for(intj=0;j1.0) { tp=tp-1; code[j]=1; } else code[j]=0; } printf("编码为:");//输出编码 for(i=0;i7、++) { printf("%d",code[i]); x+=code[i]*pow(2,(-i-1)); } printf("恢复的小数为:%.17f",x); if((x>low)&&(xline) { decode[i]=1.0; low+=d*p0; } else {8、 decode[i]=0.0; high=low+d*p0; // d=high-low; } d=high-low; line=low+d*p0; } printf("原始输入数据:"); for(i=0;i
5、0/8;//1的概率 low=0.0; high=1.0; d=1.0; for(i=0;i6、x+1; //需编码位数 printf("至少需要%d位编码",n); printf("下限是:%.17f下限是:%.17f",low,high);tp=(low+high)/2.0;//取区间的中点编码printf("选取的小数为:%.17f",tp); for(intj=0;j1.0) { tp=tp-1; code[j]=1; } else code[j]=0; } printf("编码为:");//输出编码 for(i=0;i7、++) { printf("%d",code[i]); x+=code[i]*pow(2,(-i-1)); } printf("恢复的小数为:%.17f",x); if((x>low)&&(xline) { decode[i]=1.0; low+=d*p0; } else {8、 decode[i]=0.0; high=low+d*p0; // d=high-low; } d=high-low; line=low+d*p0; } printf("原始输入数据:"); for(i=0;i
6、x+1; //需编码位数 printf("至少需要%d位编码",n); printf("下限是:%.17f下限是:%.17f",low,high);tp=(low+high)/2.0;//取区间的中点编码printf("选取的小数为:%.17f",tp); for(intj=0;j1.0) { tp=tp-1; code[j]=1; } else code[j]=0; } printf("编码为:");//输出编码 for(i=0;i7、++) { printf("%d",code[i]); x+=code[i]*pow(2,(-i-1)); } printf("恢复的小数为:%.17f",x); if((x>low)&&(xline) { decode[i]=1.0; low+=d*p0; } else {8、 decode[i]=0.0; high=low+d*p0; // d=high-low; } d=high-low; line=low+d*p0; } printf("原始输入数据:"); for(i=0;i
7、++) { printf("%d",code[i]); x+=code[i]*pow(2,(-i-1)); } printf("恢复的小数为:%.17f",x); if((x>low)&&(xline) { decode[i]=1.0; low+=d*p0; } else {
8、 decode[i]=0.0; high=low+d*p0; // d=high-low; } d=high-low; line=low+d*p0; } printf("原始输入数据:"); for(i=0;i
此文档下载收益归作者所有