Warum ändert das Hinzufügen von umschließenden Klammern das Ergebnis dieses Scala-Ausdrucks?

8

Ich portiere einen C-Code nach Scala, der Fließkomma-Arithmetik ausgiebig nutzt. Ich habe den folgenden Code in Scala basierend auf einem Kopieren / Einfügen der C-Version geschrieben:

%Vor%

Das Ergebnis dieser Berechnung ist geringfügig von dem, was die C-Version erzeugt. Wenn ich jedoch den Ausdruck in runde Klammern schließe, wie folgt:

%Vor%

Der resultierende Wert stimmt genau mit der C-Version überein. Es scheint, dass die Reihenfolge der Operationen unterschiedlich sein muss, wenn es runde Klammern gibt, wenn nicht, aber ich verstehe nicht, warum das einen Unterschied machen würde. Irgendeine Idee was hier vor sich geht?

    
anelson 14.10.2012, 01:49
quelle

1 Antwort

14

Es liegt an der Semikolon-Inferenz. Probe ( //; - abgeleitete Semikolon):

%Vor%

Und mit Klammern:

%Vor%

Oder mit Tailing "+":

%Vor%
  

Die Regeln der Semikolon-Ableitung
  Eine Zeilenendung wird als Semikolon behandelt, es sei denn, eine der folgenden Bedingungen ist erfüllt:

     
  1. Die fragliche Zeile endet mit einem Wort, das als Ende einer Anweisung nicht zulässig ist, wie z. B. ein Punkt oder ein Infix-Operator.

  2.   
  3. Die nächste Zeile beginnt mit einem Wort, das keine Anweisung starten kann.

  4.   
  5. Die Zeile endet innerhalb von Klammern (...) oder Klammern [...], da sie sowieso nicht mehrere Anweisungen enthalten können.

  6.   
    
Sergey Passichenko 14.10.2012, 02:22
quelle

Tags und Links