Pytanie w sprawie gfortran – Ostrzeżenie kompilatora FORTRAN: przestarzała arytmetyczna instrukcja IF

0

Mam błąd gfortran:

Warning: Obsolete: arithmetic IF statement at (1) 

Co to znaczy? W źródle (stare źródło):

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

Twoja odpowiedź

3   odpowiedź
0

działa w następujący sposób.

 IF (expr) label1, label2, label3

Jeśli wartością wyrażenia jest

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

W nowszych standardach FORTRAN ta funkcja jest przestarzała

W swoim kodzie możesz go zastąpić

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

Wikipedia:

„..twierdzenie Fortran definiuje trzy różne gałęzie w zależności od tego, czy wynik wyrażenia był ujemny, zerowy czy dodatni we wspomnianej kolejności ...”

„.. był w końcu oznaczony jako przestarzały w Fortran 90”.

0

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

„Arytmetyka IF jest uważana za szkodliwą”.

Twoje oświadczenie,

if (s12 - 1.0) 13, 13, 12 jest Arytmetycznym IF i jest uważane za złe programowanie.

Pamiętaj, aby wybrać, klikając znacznik wyboru przy jednej z odpowiedzi tutaj, jeśli faktycznie odpowiedział na twoje pytanie. Oczywiście nie ma nic złego w nie sprawdzaniu, czy żaden z nich nie odpowiada wystarczająco dobrze. Almo
Dziękujemy za link. Zmieniłem je na wyrażenie regularne. jeśli (s12 - 1.0 .LT. 0) następnie GOTO 13, jeśli (s12 - 1.0 .EQ. 0), następnie GOTO 13 inifif (s12 - 1.0 .GT. 0), a następnie GOTO 12 endif Kuo-Hsien Chang

Powiązane pytania