2015-01-12 1 views
0

몇 가지 변수를 계산하는 프로그램이 있는데이 변수는 출력 파일에 쓰고 있습니다.예기치 않은 값을 얻을 때 포트란이 끝나지 않습니까?

내 프로그램에서 내 공식에 대한 올바른 결과를 얻을 수 없을 때 종료되지 않을 수 있습니까?

 dx=x(1,i)-x(nk,i) 
    dy=y(1,i)-y(nk,i) 
    dz=z(1,i)-z(nk,i) 
      call PBC(dx,dy,dz) 
      r2i=dx*dx+dy*dy+dz*dz 
      r2=r2+r2i 


    r2g0=0.0d0 
    r2gx=0.0d0 

     dx=x(1,i)-x(2,i) 
     call PBC(dx,dy,dz) 
     rspani=dsqrt(dx*dx) 
    do ii=1,nk-1 
     rx=x(ii,i) 
     ry=y(ii,i) 
     rz=z(ii,i) 
    do jj=ii+1,nk 
     dx=x(jj,i)-rx 
     dy=y(jj,i)-ry 
     dz=z(jj,i)-rz 
     call PBC(dx,dy,dz) 
     r21=dx*dx+dy*dy+dz*dz 
     r21x=dx*dx 
      r2g=r2g+r21 
      r2gx=r2gx+r21x 
      r2g0=r2g0+r21 
      rh=rh+1.0d0/dsqrt(r21) 
      rh1=rh1+1.0d0 
     ir21=dnint(dsqrt(r21)/dr) 
     p(ir21)=p(ir21)+2.0D0 
     dxs=dsqrt(r21x) 
     if(dxs.gt.rspani) rspani=dxs 
    end do   

후 출력에 난 그냥이 변수 쓰기에 :

  write(12,870)r2i,sqrt(r2i),r2g0,r2gx/(nk*nk) 

내가 여기 내 관심의 변수가 계산됩니다 내 코드의 일부이며, 무엇을 명확히하기 위해

870 FORMAT (3 (f15.7,3x), f15.7)

x, y, z는 난수 생성기를 통해 전체적으로 생성됩니다.

문제점은 mc 뷰어를 사용할 때 내 출력에 올바른 값이 457 줄이고 한 줄이 "*********"인 것입니다. 그러면 출력이 올바른 것으로 계속됩니다 이 변수를 계산하는 12 단계 양식주기가 없다고합시다.

내 프로그램이 정확한 숫자를 얻을 수 있다는 것이 가능하고, 결과가 프로그램에 기록되지 않는 이유는 다음과 같습니다

그래서 제 질문은 기본인가?

또는 잘못된 출력 형식 또는 형식과 관련된 것으로 인해 발생했을 수 있습니까?

이 어떤 제안

답변

2

********* 주셔서 감사 것은 거의 확실 형식 문자열에 지정된 필드에 대한 너무 큰 수를 쓰기 위해 노력의 결과입니다.

예를 들어, f15.7로 지정된 필드는 소수의 소수점 1 자리, 선도적 인 기호 1 자리 (필요한 경우 - 항상 옵션이 설정되어있는 경우 + 인쇄 할 수 있습니다, 인쇄됩니다), 7 걸릴 것입니다 숫자의 전체 부분에 대해 6 자리를 남겨 둡니다. 따라서 프로그램이 필드에 숫자를 맞출 수없고 대신을 인쇄 할 수 있습니다. 업 최신 포트란 컴파일러로 컴파일

프로그램은 다음과 같은 NaN 또는 -Inf 그들이 IEEE 특수 값

+0

'e' 중 하나를 나타내는 부동 소수점 숫자가 발생할 경우'f', D 문자열을 작성합니다 '오, 이제 정답으로 대답 해. –

관련 문제