如何解决:因为我在hpc中使用fortran获得的错误百分比为199%?

如何解决:因为我在hpc中使用fortran获得的错误百分比为199%?,fortran,hpc,Fortran,Hpc,我得到的错误百分比(%)为:199.20我犯了什么错误?我的公式是 program EConstant include 'mpif.h' INTEGER n,ierr,lcv,rank,size,i DOUBLE PRECISION INTEGER factor, reduc DOUBLE PRECISION INTEGER redat, redrl, repnt DOUBLE PRECISION actval, actdiff,erpnt DOUB

我得到的错误百分比(%)为:
199.20
我犯了什么错误?我的公式是

   program EConstant
   include 'mpif.h'

   INTEGER n,ierr,lcv,rank,size,i
   DOUBLE PRECISION INTEGER factor, reduc 
   DOUBLE PRECISION INTEGER redat, redrl, repnt
   DOUBLE PRECISION actval, actdiff,erpnt
   DOUBLE PRECISION este, reldiff 


   integer status(MPI_STATUS_SIZE)

   call MPI_INIT(ierr)
   call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)
   call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)                                                                        

                   l

   actval =  2.71828D0
   n=1000
   factor = 1.D0
   este = 0.D0
   DO lcv = rank, n, size
   DO i=1,lcv
   factor=factor*i
   END DO
c           factor = factor * lcv
            este = este + 1/factor
   END DO

   actdiff =  actval - este
   reldiff = actdiff/((actval+este)/2)
   erpnt = (actdiff/actval)*100 

   CALL MPI_REDUCE(este,reduc,1,MPI_DOUBLE_PRECISION,
 & MPI_SUM,0,MPI_COMM_WORLD,ierr)
   CALL MPI_REDUCE(actdiff,redat,1,MPI_DOUBLE_PRECISION,
 & MPI_SUM,0,MPI_COMM_WORLD,ierr)
   CALL MPI_REDUCE(reldiff,redrl,1,MPI_DOUBLE_PRECISION,
 & MPI_SUM,0,MPI_COMM_WORLD,ierr)
   CALL MPI_REDUCE(erpnt,repnt,1,MPI_DOUBLE_PRECISION,
 & MPI_SUM,0,MPI_COMM_WORLD,ierr)

  if(rank.eq.0)PRINT *,'The estimate of e is: ', reduc
  if(rank.eq.0)PRINT *,'Actual difference is: ', redat
  if(rank.eq.0)PRINT *,'Relative difference is: ', redrl
      if(rank.eq.0)PRINT *,'Error percentage (%) is: ', repnt
   call MPI_FINALIZE(ierr)
   end

快速浏览一下,我发现您正在对某些错误度量进行加法缩减,而不是对所涉及的进程数进行更正。如果一个进程测量的错误为
100%
,而第二个进程测量的错误为
99.2%
,那么您的程序似乎会将它们相加,得出一个错误为
199.2%


但是,正如我所说,我只是简单地看了一下。

你的意思是我应该在调用附近进行修改\u MPIReduceNo,我的意思是你应该弄清楚你想要做什么算术,然后编写代码来实现它。如何从每个进程计算的错误计算整个程序的错误?回答这个问题,然后编写代码。我的建议是先编写一个非mpi程序,确保它正常工作,然后靠近观察点,你应该在este上只调用reduce一次。在还原后只在线程0上进行错误计算。知道了,我正在这样做。
 error percentage = (actual difference/ actual value) *100  I am getting error percentage (%) as: `199.20` what mistake am I doing ? My formula is

 error percentage = (actual difference/ actual value) *100  I am getting error percentage (%) as: `199.20` what mistake am I doing ? My formula is

 error percentage = (actual difference/ actual value) *100  I am getting error percentage (%) as: `199.20` what mistake am I doing ? My formula is

 error percentage = (actual difference/ actual value) *100