| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 686 人关注过本帖
标题:[求助]怎么把大的double型转换成整型(算术编码问题)
只看楼主 加入收藏
yuanhong
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-4-2
收藏
 问题点数:0 回复次数:0 
[求助]怎么把大的double型转换成整型(算术编码问题)

#include"iostream"
#include"iomanip"
#include"string"
#include"cmath"
using namespace std;
struct libray
{
char s;
long double p;
long double P;
};
class Arithmetic
{
public:
Arithmetic()
{
n=10;
cout<<"please input the code length:"<<endl;
cin>>ol;
lib[0].s='0';lib[1].s='1';lib[2].s='2';lib[3].s='3';
lib[4].s='4';lib[5].s='5';lib[6].s='6';lib[7].s='7';
lib[8].s='8';lib[9].s='9';
lib[0].p=0.1;lib[1].p=0.1;lib[2].p=0.1;lib[3].p=0.1;
lib[4].p=0.1;lib[5].p=0.1;lib[6].p=0.1;lib[7].p=0.1;
lib[8].p=0.1;lib[9].p=0.1;
lib[0].P=0;
for(i=1;i<n;i++){lib[i].P=lib[i-1].P+lib[i-1].p;cout<<i<<" "<<lib[i].P<<endl;}
lib[n].P=1;
cout<<"please input the string:"<<endl;
cin>>oc;
l=oc.length();
}
void coding();
void decode();
private:
string oc,roc;char nc[60];
libray lib[20];
long double C,A;
int l,n,ol;
int i,j;
};
void Arithmetic::coding()
{
A=1;C=0;
double gl=0;
int L=0;
for(i=0;i<l;i++)
{
for(j=0;j<n;j++)
if(oc[i]==lib[j].s) break;
C+=A*lib[j].P;
A=A*lib[j].p;
}
cout<<C<<endl;
gl=log(1/A)/log(2);
cout<<gl<<endl;
if((gl-(int)gl)!=0)
L=(int)gl+1;
else L=(int)gl;
cout<<L<<endl;
ltoa(pow(2,L)*C+1,nc,2);//这个地方把pow(2,L)*C+1是错误的,怎么改一下 ,或者有什么好的方法没有
cout<<nc<<endl;
int length;
i=strlen(nc);
cout<<i<<endl;
length=L-i;
for(j=L;j>length;j--)
nc[j-1]=nc[i-1];
for(j=0;j<length;j++)
nc[j]='0';
for(j=L;j<60;j++)
nc[j]=NULL;
cout<<nc<<endl;
}
void Arithmetic::decode()
{ unsigned long int mdc;int cl=0,L;
L=strlen(nc);
long double dC=0;
unsigned long int dc=0;
for(i=L-1;i>=0;i--)
{
if(nc[i]=='1')
dc=dc+pow(2,i);
}

/* for(i=L-1;i>=0;i--)
{
mdc=atoi(&nc[i]);
nc[i]=NULL;
dc=dc+mdc*pow(2,L-i-1);
}*/
cout<<dc<<endl;
dC=dc/pow(2,L);
cout<<dC<<endl;
while(dC>=0)
{
for(i=0;i<n;i++)
if(dC<lib[i].P) break;
roc+=lib[i-1].s;
cl++;
if(cl==ol) break;
else
dC=(dC-lib[i-1].P)/lib[i-1].p;
}
cout<<roc<<endl;
}

void main()
{

Arithmetic a;
//if(a.check()==0) return;
a.coding();
a.decode();
}
其实是算术编码的问题 ,希望高手改正一下,或者有什么好的方法,谢谢了

搜索更多相关主题的帖子: 整型 double 算术 编码 
2006-05-07 17:38
快速回复:[求助]怎么把大的double型转换成整型(算术编码问题)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011710 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved