Pergunta sobre gfortran – Aviso do compilador FORTRAN: instrução if aritmética obsoleta

0

Eu tenho um erro de gfortran:

Warning: Obsolete: arithmetic IF statement at (1) 

O que isto significa? Na fonte (fonte antiga):

66 s12 = max(epsilon, s1 + s2)
c Then execution will go to label 13. Will this stop any further problems?
if (s12 - 1.0) 13, 13, 12
13 z = s1 / s12

Sua resposta

3   a resposta
0

Wikipedia:

"..a declaração Fortran define três ramos diferentes dependendo se o resultado de uma expressão foi negativo, zero ou positivo, na ordem dita ..."

".. foi finalmente rotulado como obsoleto em Fortran 90."

0

http://www.ibiblio.org/pub/languages/fortran/ch1-5.html

"O aritmético IF é considerado prejudicial".

Sua declaração,

if (s12 - 1.0) 13, 13, 12 é um IF Aritmético e é considerado uma má programação.

Lembre-se de escolher clicando na marca de seleção por uma das respostas aqui, se ela de fato respondeu à sua pergunta. É claro que não há nada de errado em não checar se nenhum deles responde bem o suficiente. Almo
Obrigado pelo link. Eu mudei para a expressão regular. if (s12 - 1.0 .LT. 0) então GOTO 13 else if (s12 - 1.0 .EQ. 0) então GOTO 13 elseif (s12 - 1.0 .GT. 0) então GOTO 12 endif Kuo-Hsien Chang
0

funciona da seguinte maneira.

 IF (expr) label1, label2, label3

Se o valor da expressão é

less than 0, jump to label1 
equal to 0, jump to label2
greater than 0, jump to label3

Em novos padrões FORTRAN, esse recurso é obsoleto

No seu código você pode substituí-lo por

      IF (s12 - 1.0 .gt. 0 ) GOTO 12
13    z = s1 / s12

Perguntas relacionadas