Gleitkomma-Ausnahmen signalisieren in der neuen Gfortran-Version
Ich arbeite derzeit daran, eine Subroutine einer Software zu debuggen, die mein Chef in den 90er Jahren geschrieben hat. Es scheint eine Gleitkomma-Ausnahme zu geben, die in einer do-Schleife eines bestimmten Unterprogramms auftritt:
16 irad=1,incmax
rr1=rr2
rr2=rr2+rdiv
if(rr1.gt.rlimit) goto 16
if(pts(irad).gt.0.0) then
discrm=(rmsden(mt,irad)/pts(irad))
1 -((average(mt,irad)**2)/(pts(irad)**2))
else
discrm=0.0
endif
if(discrm.ge.0.0) then
rmsden(mt,irad)=sqrt(discrm)
else
rmsden(mt,irad)=0.0
endif
average(mt,irad)=average(mt,irad)/pts(irad)
average(mt,irad)=(average(mt,irad)*100.0)/bigmost(mt)
rmsden(mt,irad)=(rmsden(mt,irad)*100.0)/bigmost(mt)
denbot(mt,irad)=(denbot(mt,irad)*100.0)/bigmost(mt)
dentop(mt,irad)=(dentop(mt,irad)*100.0)/bigmost(mt)
iradmax(mt)=irad
17 if(iverbose0.ge.1) then
ipts=pts(irad)
iptszero=ptszero(irad)
if(ipts.eq.0) then
average(mt,irad)=0.0
rmsden(mt,irad)=0.0
denbot(mt,irad)=0.0
dentop(mt,irad)=0.0
endif
write(6,99) rr1,rr2,ipts,iptszero,average(mt,irad),
1 rmsden(mt,irad),denbot(mt,irad),dentop(mt,irad)
99 format(1x,2f9.2,2i8,2f8.1,2f8.1)
endif
16 continue
stop 'PIPPA'
If I put the stop 'PIPPA' statement before "16 continue", the there are no errors. However, if the stop statement goes after the "16 continue", I get:
Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG
STOP PIPPA
Dies geschah nicht vor dem Upgrade der GCC-Compiler / Bibliotheken. Ich gebe zu, dass ich durch Googeln eine Menge Ressourcen gefunden habe, aber ich bin immer noch nicht in der Lage, dies zu debuggen. Ich habe auch das @ probie--fpe-trap
Flags beim Kompilieren, geben jedoch nichts aus.
Warum beschwert sich Gfortran jetzt?