求教大佬

zyx6680599 2019-02-03 07:18:02
下面这段代码,还没有完工但已经编译完全,但是在调试完第142行时出现了这种情况请问,
这个-nan(0x8000000000000)突然就冒出来了,求教大佬,下面是代码
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct star
{
double dis,speed,m,zuoy,qianh,F,r,av,duich,G,g,nwqianh,nwzuoy,v;

}sun,sirius,VyCanis,yuandian;
int main()
{
yuandian.dis=0;yuandian.G=0;yuandian.speed=0;yuandian.zuoy=0;yuandian.qianh=0;yuandian.F=0;
double dissusi,dissuV,dissiV;
double Fsutosi,FVtosi,FsitoV,Fsitosu,FsutoV,FVtosu;
double beFsu,beFsi,beFV;
double areasuV,areasiV,areaVsu,areaVsi,areasusi,areasisu;
double x,y,xx,yy,xxx,yyy;
double a,b,c,d,e,f,g,h,j,k,l,m,n;
double bb,kk,bbb,kkk;
double we,wr,wt,wy,wu,wi,wx;
double fuc,cao,sahbix;
double asd,qaz,qwe;
double poi,plo,yui,bx,by,sahbiy;
double sahbiyy,p,jm,pp,jj,ppp,jjj;
int i,t;
int aa[100],bbbb[100],cc[100];
FILE *fp,*fq,*fr;
printf("请输入太阳距离原点的前后距离(纵坐标)(可以是负数)(天文单位)\n");
scanf("%lf",&sun.qianh);
printf("请输入太阳距离原点的左右距离(横坐标) (万千米)(可以是负数)\n");
scanf("%lf",&sun.zuoy);
printf("请输入太阳直径(万千米)(提示,尽量不要太大谢谢)\n");
scanf("%lf",&sun.r);
sun.dis=sqrt((sun.zuoy*sun.zuoy+sun.qianh*sun.qianh));
printf("太阳距离原点为%lf万千米\n",sun.dis);
printf("请输入太阳的质量(万吨)\n");
scanf("%lf",&sun.m);
printf("太阳信息:G%.0lf型主序星;光谱:黄白;质量:%lf亿吨;核心温度%lf摄氏度",sun.m/sun.r*10,sun.G*100,sun.G*1000);
printf("请输入天狼星距离原点的前后距离(纵坐标)(可以是负数)(天文单位)\n");
scanf("%lf",&sirius.qianh);
printf("请输入天狼星距离原点的左右距离(横坐标)(可以是负数)(万千米)\n");
scanf("%lf",&sirius.zuoy);
sirius.dis=sqrt((sirius.zuoy*sirius.zuoy+sirius.qianh*sirius.qianh));
dissusi=sqrt((sirius.zuoy-sun.zuoy)*(sirius.zuoy-sun.zuoy)+(sirius.qianh-sun.qianh)*(sirius.qianh-sun.qianh));
printf("天狼星距离原点为%lf个天文单位\n天狼星距离太阳为%lf个万千米",sirius.dis,dissusi);
printf("请输入天狼星体积(万千米)\n");
scanf("%lf",&sirius.r);
printf("请输入天狼星的质量(万吨)\n");
scanf("%lf",&sirius.m);
printf("天狼星信息:蓝超巨星。光谱:蓝;质量:%lf亿吨;核心温度%lf摄氏度",sirius.m*100,sirius.m*1000);
printf("请输入大犬座Vy距离原点的前后距离(纵坐标)(可以是负数)(万千米)\n");
scanf("%lf",&VyCanis.qianh);
printf("请输入大犬座Vy距离原点的左右距离(横坐标) (万千米)(可以是负数)\n");
scanf("%lf",&VyCanis.zuoy);
printf("请输入大犬座Vy的直径(万千米)\n");
scanf("%lf",&VyCanis.r);
VyCanis.dis=sqrt((VyCanis.zuoy*VyCanis.zuoy+VyCanis.qianh*VyCanis.qianh));
printf("大犬座Vy距离原点为%lf万千米\n",VyCanis.dis);
dissuV=sqrt((VyCanis.qianh-sun.qianh)*(VyCanis.qianh-sun.qianh)+(VyCanis.zuoy-sun.zuoy)*(VyCanis.zuoy-sun.zuoy));
printf("大犬座Vy距离太阳为%lf万千米\n",dissuV);
dissiV=sqrt((VyCanis.qianh-sirius.qianh)*(VyCanis.qianh-sirius.qianh)+(VyCanis.zuoy-sirius.zuoy)*(VyCanis.zuoy-sirius.zuoy));
printf("大犬座Vy距离天狼星%lf万千米\n",dissiV);
printf("请输入大犬座Vy的质量(万吨)\n");
scanf("%lf",&VyCanis.m);
printf("大犬座Vy信息:红巨星;光谱:黄白;引力:%lf百万牛;核心温度%lf摄氏度",sun.m*100,sun.m*1000);
printf("太阳坐标为(%lf,%lf)\n天狼星坐标为(%lf,%lf)\n大犬座Vy坐标为(%lf,%lf)",sun.zuoy,sun.qianh,sirius.zuoy,sirius.qianh,VyCanis.zuoy,VyCanis.qianh);
printf("开始运行(无第一推动力,即初始运动");
system("cls");
t=1;
do
{
Fsitosu=6.67*pow(10,-11)*sun.m*sirius.m/dissusi/dissusi;/*万有引力公式*/
FVtosu=6.67*pow(10,-11)*VyCanis.m*sun.m/dissuV/dissuV;
a=sirius.zuoy+VyCanis.zuoy-sun.zuoy;/*另一个顶点的坐标*/
b=sirius.qianh+VyCanis.qianh-sun.qianh;
k=(sun.qianh-b)/(sun.zuoy-a);/*y=kx+m,太阳与对称点连线解析式*/
m=(b*sun.zuoy-a*sun.qianh)/(sun.zuoy-a);
kk=(sirius.qianh-sun.qianh)/(sirius.zuoy-sun.zuoy);/*太阳与天狼星两点连线解析式*/
bb=((sun.zuoy*sirius.qianh)-(sun.qianh*sirius.zuoy))/(sun.zuoy-sirius.zuoy);
kkk=(VyCanis.qianh-sun.qianh)/(VyCanis.zuoy-sun.zuoy);/*太阳与大犬座Vy两点连线解析式*/
bbb=((sun.zuoy*VyCanis.qianh)-(sun.qianh*VyCanis.zuoy))/(sun.zuoy-VyCanis.zuoy);
we=sun.qianh-bb;
/*wx=2*(sun.zuoy+kk*we)*2*(sun.zuoy+kk*we)-4*(kk*kk+1)*(we*we-Fsitosu*Fsitosu+sun.zuoy*sun.zuoy);
/*if(wx>=0)
{
printf("asd");
}
else
{
break;
}*/
wi=(2*(sun.zuoy+we*kk)+sqrt(2*(sun.zuoy+kk*we)*2*(sun.zuoy+kk*we)-4*(kk*kk+1)*(we*we-Fsitosu*Fsitosu+sun.zuoy*sun.zuoy)))/(2*(kk*kk+1));
wr=(2*(sun.zuoy+we*kk)-sqrt(2*(sun.zuoy+kk*we)*2*(sun.zuoy+kk*we)-4*(kk*kk+1)*(we*we-Fsitosu*Fsitosu+sun.zuoy*sun.zuoy)))/(2*(kk*kk+1));
wt=sirius.zuoy-wi;
wu=sirius.zuoy-wr;
fuc=fabs(wt);
cao=fabs(wu);
if(fuc>cao)
{
wx=wr;
}
else
{
wx=wi;
}
wy=kk*wx+bb;
asd=sun.qianh-bbb;
qwe=(2*(sun.zuoy+asd*kkk)+sqrt(2*(sun.zuoy+kkk*asd)*2*(sun.zuoy+kkk*asd)-4*(kkk*kkk+1)*(asd*asd-FVtosu*FVtosu+sun.zuoy*sun.zuoy)))/(2*(kkk*kkk+1));
qaz=(2*(sun.zuoy+asd*kkk)-sqrt(2*(sun.zuoy+kkk*asd)*2*(sun.zuoy+kkk*asd)-4*(kkk*kkk+1)*(asd*asd-FVtosu*FVtosu+sun.zuoy*sun.zuoy)))/(2*(kkk*kkk+1));
plo=VyCanis.zuoy-qwe;
poi=VyCanis.zuoy-qaz;
wu=fabs(plo);
yui=fabs(poi);
if(wu>yui)
{
bx=qaz;
}
else
{
bx=qwe;
}
by=kkk*bx+bbb;
sahbix=wx+bx-sun.zuoy;
sahbiy=wy+by-sun.qianh;
sahbiyy=k*sahbix+m;
/*if(sahbiy==sahbiyy)
{
printf("666");
}
else
{
printf("failed");
}*/
beFsu=sqrt((sahbix-sun.zuoy)*(sahbix-sun.zuoy)+(sahbiy-sun.qianh)*(sahbiy-sun.qianh));

printf("太阳受力%lf",beFsu);
system("cls");
sun.g=sirius.m*6.67*pow(10,-11)/dissusi/dissusi;
sun.av=beFsu/sun.m;
sun.v=sun.av*t;
sun.duich=t*sun.v;
we=sun.qianh-m;
p=(2*(sun.zuoy+we*k)+sqrt(2*(sun.zuoy+k*we)*2*(sun.zuoy+k*we)+4*(k*k+1)*(we*we-sun.duich*sun.duich+sun.zuoy*sun.zuoy)))/(2*(k*k+1));/*就是调试这块时出现了-nan(0x800000000)*/
jm=(2*(sun.zuoy+we*k)-sqrt(2*(sun.zuoy+k*we)*2*(sun.zuoy+k*we)-4*(k*k+1)*(we*we-sun.duich*sun.duich+sun.zuoy*sun.zuoy)))/(2*(k*k+1));
/*if(t==1)*/
pp=a-p;
jj=a-jm;
ppp=fabs(pp);
jjj=fabs(jj);
if(ppp>jjj)
{
sun.nwzuoy=jm;
}
else
{
sun.nwzuoy=p;
}
sun.nwqianh=k*sun.nwzuoy+m;
sun.zuoy=sun.nwzuoy;
sun.qianh=sun.nwqianh;
dissusi=sqrt((sirius.zuoy-sun.zuoy)*(sirius.zuoy-sun.zuoy)+(sirius.qianh-sun.qianh)*(sirius.qianh-sun.qianh));/*更新数据。*/
dissuV=sqrt((VyCanis.qianh-sun.qianh)*(VyCanis.qianh-sun.qianh)+(VyCanis.zuoy-sun.zuoy)*(VyCanis.zuoy-sun.zuoy));
Fsitosu=6.67*pow(10,-11)*sun.m*sirius.m/dissusi/dissusi;/*万有引力公式*/
FVtosu=6.67*pow(10,-11)*VyCanis.m*sun.m/dissuV/dissuV;

t++;
} while(t<=500&&dissusi!=0&&dissuV!=0);
printf("横坐标%lf\n",sun.zuoy);
printf("纵坐标%lf\n",sun.qianh);
system("pause");
return 0;
}

...全文
296 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2019-02-12
  • 打赏
  • 举报
回复
加个打印很难么?
独孤过 2019-02-04
  • 打赏
  • 举报
回复
运算中出现无效数据,许多情况会导致-nan(ind) 如0除以0,负数开平方等 参看以下博文 https://blog.csdn.net/acoolgiser/article/details/81188440 试过这个代码,do-while循环多次就会导致-nan(ind)
十八道胡同 2019-02-04
  • 打赏
  • 举报
回复
建议你这样,把142行 涉及到的变量都打到日志里面,看下哪个变量有问题?

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧