warning C4244: '=' : conversion from 'double' to 'float', possible loss of data 应该好解决的,帮我

voidmain(){inti,n=200,m=32,m1=60,l,l1;l=n+m-1;l1=l+m1-1;floatt,alfa,f0,pi,dt;f0=35.0;... void main()
{
int i,n=200,m=32,m1=60,l,l1;
l=n+m-1;l1=l+m1-1;
float t,alfa,f0,pi,dt;
f0=35.0;
pi=3.14159f;
dt=0.001f;
double *h0,*h,*bx,*y,*y1,*x,*xx,b[32];
FILE *fp,*p,*p1,*p2,*p3,*p4;
fp=fopen("deltat.txt","r");
p=fopen("原反射系数(200).dat","w+"); //自己改了!!!!下面的也一样!!!
p1=fopen("合成地震记录(211).dat","w+");
p2=fopen("自相关结果(211).dat","w+");
p3=fopen("反滤波因子(60).dat","w+");
p4=fopen("反射系数(222).dat","w+");
//动态申请存储空间
h0=(double *)calloc(n,sizeof(double));
h=(double *)calloc(m1,sizeof(double));
bx=(double *)calloc(m1,sizeof(double));
y=(double *)calloc(m1,sizeof(double));
x=(double *)calloc(l,sizeof(double));
xx=(double *)calloc(l,sizeof(double));
y1=(double *)calloc(l1,sizeof(double));

//读数据

for(i=0;i<n;i++)
{
fscanf(fp,"%f",&t);
h0[i]=(double)t;
}
fclose(fp);
for(i=0;i<m1;i++)
{
if(i==0) bx[i]=1.0;
else bx[i]=0.0;
}
alfa=(f0*f0*log(1.8))*2.0; &&(这个地方出了错)
for(i=0;i<m;i++)
{b[i]=sin(2*pi*f0*(i)*dt)*exp(-alfa*((i)*dt)*((i)*dt));
}
//输出反射系数
for(i=0;i<n;i++)
fprintf(p,"%f\n",h0[i]);
fclose(p);
//调用褶积函数,计算合成地震记录,并输出
con(b,m,h0,n,x,l);
for(i=0;i<l;i++)
fprintf(p1,"%f\n",x[i]);
fclose(p1);

//调用相关函数,计算自相关rxx[l],并输出
cor(x,l,x,l,xx);
for(i=0;i<l;i++)
fprintf(p2,"%f\n",xx[i]);
fclose(p2);

//调用莱文森算法,计算反滤波因子,并输出
i=lvs(xx,m1,bx,y);
printf("%d\n",i);
for(i=0;i<m1;i++)
fprintf(p3,"%f\n",y[i]);
fclose(p3);
//调用褶积函数,计算反射系数
con(y,m1,x,l,y1,l1);
for(i=0;i<l1;i++)
fprintf(p4,"%f\n",y1[i]);
fclose(p4);
}
展开
 我来答
系榆6I
推荐于2016-06-27 · TA获得超过389个赞
知道小有建树答主
回答量:359
采纳率:0%
帮助的人:251万
展开全部
你将double转换成float型当然会丢失数据了
float t,alfa,f0,pi,dt;这里定义的alfa是float型,
alfa=(f0*f0*log(1.8))*2.0; &&(这个地方出了错)这里的右边结果是double型
所以你应该将alfa定义成
double alfa;
这里面的格式控制符%f全部换成%lf
//输出反射系数
for(i=0;i<n;i++)
fprintf(p,"%f\n",h0[i]);
fclose(p);
//调用褶积函数,计算合成地震记录,并输出
con(b,m,h0,n,x,l);
for(i=0;i<l;i++)
fprintf(p1,"%f\n",x[i]);
fclose(p1);
//调用相关函数,计算自相关rxx[l],并输出
cor(x,l,x,l,xx);
for(i=0;i<l;i++)
fprintf(p2,"%f\n",xx[i]);
fclose(p2);
//调用莱文森算法,计算反滤波因子,并输出
i=lvs(xx,m1,bx,y);
printf("%d\n",i);
for(i=0;i<m1;i++)
fprintf(p3,"%f\n",y[i]);
fclose(p3);
//调用褶积函数,计算反射系数
con(y,m1,x,l,y1,l1);
for(i=0;i<l1;i++)
fprintf(p4,"%f\n",y1[i]);
fclose(p4);

其他的错误因为你的程序不完整,没法查,比如con, lvs函数你就没有贴出来
帐号已注销
推荐于2018-03-02 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1229万
展开全部
这个是警告信息。意思是你将double直接转换成float可能会丢失信息。
你的代码 我不看了。
你把类似这样的语句:
a = b; //a是一个float, b是一个double
func(b); //函数的参数是float

改成
a = static_cast<float>(b);
func(static_cast<float>(b));

也就是用转换去掉编译器警告。

或者你把所有的float改成double。

我有一些疑问:你为什么要用float呢?为什么你不全用double?
你知道什么时候用float和什么时候用double 吗?

回答不了这些问题,就全用 double
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式