2016-06-23 7 views
0

Ich verstehe nicht, warum diese als falsch ausgewertet wird.Fortran logisch vergleichen

A = .false. B = .wahr.

(A .eqv. .true. .oder. B .eqv. .true.) Gibt mir .false.

Ich muss Parathesis hinzufügen, um meine bedingte Anweisung funktionieren zu lassen. Kann mir das jemand erklären? Danke vielmals!

Antwort

3

Ich denke, es ist die Reihenfolge der Operationen. .or. Ich denke, eine höhere Ordnung von Operationen als .eqv.

So Ihre Aussage

((A .eqv. (.true. .or. B)) .eqv. .true.) 
((A .eqv.  .true. ) .eqv. .true.) 
( .false.    .eqv. .true.) 
       .false. 

Nicht sicher, wenn auch in

entspricht.

So oder so, ist es einfach, die vorgesehene Reihenfolge mit Klammern zu erzwingen:

((A .eqv. .true.) .or. (B .eqv. .true.)) 

(Natürlich kann Ihr Beispiel in (A .or. B) kondensiert werden, aber ich denke, das ist nicht der Punkt war;))

+0

Sie können in Ihrer Antwort viel sicherer sein: Es ist korrekt. Siehe z. B. Tabelle 7.1 von Fortran 2008 für die Vorrangstellung des Betreibers. – francescalus

+0

Ohne Deklarationen usw. zu sehen, ist es nicht sicher (https://stackoverflow.com/a/29034913), dass "A.eqv..true" durch "A" ersetzt werden kann. – francescalus