输出数据出现IND怎么解决

#include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>#define fm 30#define pi 3.1415926#define dt 0.001#define Nt 1000#define Nx 400#define Nz 400#define N 6void fun(float *source){ int it,i; float t1,t2,t0,tdelay; for(i=0;i<Nt;i++)     source[i]=0.0; tdelay=2.0*sqrt(pi)/(fm*4.0); for(it=0;it<Nt;it++) { t1=it*dt-tdelay; source[it]=(1.0-2.0*pow(pi*fm*t1,2.0))*exp(-pow(pi*fm*t1,2.0)); }}int main(){  FILE *fp;    char filename[40]; int it,ix,iz,shot; int Snx,Snz,**source_shot; float dx,dz,dh;    float U,**Un,**Unm,**Unp,**v,*source; //Un t时刻   Unp  t+1时刻   Unm t-1时刻    float a2; int m; float c0=0.0,Sum=0.0; float C[7];    Un=(float**)malloc(sizeof(float*)*Nx);    for(ix=0;ix<Nx;ix++){    Un[ix]=(float*)malloc(sizeof(float)*Nz);}    Unm=(float**)malloc(sizeof(float*)*Nx);    for(ix=0;ix<Nx;ix++){    Unm[ix]=(float*)malloc(sizeof(float)*Nz);}    Unp=(float**)malloc(sizeof(float*)*Nx);    for(ix=0;ix<Nx;ix++){ Unp[ix]=(float*)malloc(sizeof(float)*Nz);}    source_shot=(int**)malloc(sizeof(int*)*Nx);    for(ix=0;ix<Nx;ix++){    source_shot[ix]=(int*)malloc(sizeof(int)*Nz);} v=(float**)malloc(sizeof(float*)*Nx); for(ix=0;ix<Nx;ix++){ v[ix]=(float*)malloc(sizeof(float)*Nz);} source=(float*)malloc(sizeof(float)*Nt);    C[0]=-2.982778;C[1]=1.714286;C[2]=-0.2678578;C[3]=0.052910;C[4]=-0.008929;C[5]=0.001039;C[6]=-0.000060; for(m=0;m<=N;m++) { c0+=C[m]; } for(ix=0;ix<Nx;ix++) { for(iz=0;iz<Nz;iz++) { v[ix][iz]=2000; } }    dx=dz=dh=5.0;    fun(source);    Snx=Nx/2;    Snz=Nz/2; for(ix=0;ix<Nx;ix++) { for(iz=0;iz<Nz;iz++) { Un[ix][iz]=0.0; Unm[ix][iz]=0.0; Unp[ix][iz]=0.0;         } }     for(it=0;it<Nt;it++) {    printf("t=%d\n",it);    for(ix=N;ix<(Nx-N);ix++)         for(iz=N;iz<(Nz-N);iz++) { a2=v[ix][iz]*v[ix][iz]*dt*dt/dh/dh; { for(m=1;m<=N;m++) { Sum=Sum+C[m]*(Un[ix-m][iz]+Un[ix+m][iz]+Un[ix][iz-m]+Un[ix][iz+m]); } }                if(ix==Snx&&iz==Snz) shot=1; else shot=0; Unp[ix][iz]=a2*Sum+2*(1+a2*c0)*Un[ix][iz]-Unm[ix][iz]+source[it]*shot; }         for(ix=N;ix<(Nx-N);ix++) { for(iz=N;iz<(Nz-N);iz++)    {         Unm[ix][iz]=Un[ix][iz]; Un[ix][iz]=Unp[ix][iz];    } }         if(it==500) {    if((fp=fopen("wavefront.txt","w"))!=NULL)                {                  for(ix=N;ix<(Nx-N);ix++)                for(iz=N;iz<(Nz-N);iz++)                       {                          fprintf(fp,"%f\n",Un[ix][iz]);                       }                    fclose(fp);                }                    }  }return 0;}

很可能是除数为0造成的无效数据

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632