Syntaxregeln
Alle in arithmetischen Anweisungen verwendeten Bezeichner müssen als numerische Daten im Datenteil definiert sein.
Alle Literale, die in arithmetischen Anweisungen verwendet werden, müssen numerisch sein. Es können Gleitpunktliterale sein.
Die Maximalgröße eines jeden Operanden (Bezeichner oder Literal) beträgt 31 Dezimalziffern.
Die Maximalgröße aller Ergebnisse nach der Dezimalpunktausrichtung beträgt 31 Dezimalziffern.
Werden mehrere Operanden, die in einer arithmetischen Anweisung auftreten, ihrem Dezimalpunkt entsprechend in einem hypothetischen Datenfeld „überlagert“, dann darf die dafür benötigte Größe dieses Datenfeldes (gemeinsame Stellenzahl) 31 Dezimalziffern nicht überschreiten (siehe „ADD-Anweisung" und „SUBTRACT-Anweisung").
Maximal 100 Operanden können in einer arithmetischen Anweisungen bzw. einem arithmetischen Ausdruck angegeben werden. Die Anzahl der öffnenden und schließenden Klammern () darf 250 nicht übersteigen.
Im Format eines Datenfeldes, das an einer Rechnung beteiligt ist (z.B. als ein Summand, Subtrahend oder Multiplikator), dürfen keine Zeichen zur Druckaufbereitung auftreten. Vorzeichen und Rechendezimalpunkte gelten nicht als Zeichen zur Druckaufbereitung.
Bezeichner, die nur dazu verwendet werden, das Resultat einer arithmetischen Anweisung aufzunehmen (z.B. der in der GIVING-Angabe benutzte Bezeichner) können numerisch druckaufbereitete Felder sein (siehe „GIVING-Angabe").
Bedingungsnamen dürfen nicht als Operanden auftreten.
Allgemeine Regeln
Die Datenbeschreibung der Operanden muss nicht gleich sein; notwendige Konvertierung und Dezimalpunktausrichtung werden während der gesamten Rechnung durchgeführt (siehe „MOVE-Anweisung“, Regeln für numerische Übertragung, "MOVE-Anweisung ").
Wenn das Sende- und Empfangsfeld einer arithmetischen Anweisung oder in einer INSPECT-, MOVE-, SET-, STRING- oder UNSTRING-Anweisung den gleichen Internspeicherplatz belegt (d.h. wenn sich die Operanden überlagern), ergeben sich bei der Ausführung der Anweisung unvorhersagbare Ergebnisse.
Das Ergebnis ist ebenfalls unvorhersagbar, wenn der Bezeichner zur Programmausführungszeit andere als numerische Daten enthält.
Wenn die Eingabeoperanden für arithmetische Anweisungen keine gültigen numerischen Daten enthalten, kann zur Programmausführungszeit ein Datenfehler auftreten.
Die folgenden Regeln werden für die Berechnung von Exponentialausdrücken verwendet:
Ist die Basis eines Exponentialausdrucks Null, muss der Exponent einen Wert größer Null haben. Andernfalls tritt eine Überlauf-Bedingung auf.
Hat ein Exponentialausdruck eine positive und eine negative reelle Lösung, ist der Ergebniswert positiv.
Ergibt die Berechnung keine reelle Zahl, tritt eine Überlauf-Bedingung auf.
Bei Auflösung von arithmetischen Anweisungen generiert der Compiler eine Reihe von arithmetischen Operationen. Abhängig von der Beziehung der verschiedenen Operanden zueinander generiert der Compiler ein oder mehrere Zwischenergebnisfelder. Diese Zwischenergebnisfelder werden so lange aufgehoben, bis sie zur Lösung des Endergebnisses der Anweisung benötigt werden.
Die folgende Tabelle 25 zeigt die Anzahl der ganzzahligen und der Dezimalziffern, die je nach ausgeführter Operation im Ergebnisfeld aufgehoben werden. Aus dieser Tabelle kann für eine gegebene Anweisung die optimale Operandengröße für die gewünschte Genauigkeit ermittelt werden. Anhand der Dezimalstellen in jedem der Operanden und durch Bezugnahme auf die in der Tabelle angegebenen Formeln kann der Programmierer die genaue Stellenanzahl bestimmen, die der Compiler dem Ergebnisfeld zur Verfügung stellen wird. Jedoch wird beim Absetzen des Ergebnisses in das Ergebnisfeld Dezimalpunktausrichtung durchgeführt, so dass dies ebenfalls für die Bestimmung der Genauigkeit des Ergebnisses wichtig ist.
Hat einer der Operanden das Datenformat COMPUTATIONAL oder COMPUTATIONAL-5, so gelten spezielle Regeln, die in der Tabelle 25 nicht dargestellt werden können.
Art derAnweisung Operation Dezimalstellen im Zwischenergebnis (d) Ganzzahl-Stellen im Zwischenergebnis (i) Arithmetisch Addition oderSubtraktion (+) oder ( -
)MAX (Ad, Bd) MAX (Ai+1, Bi+1) Multiplikation ( *
)Ad+Bd Ai+Bi Division (/) MAX (Fd+1, Ad) Ai+Bd IF oder
PERFORMAddition oderSubtraktion (+) oder ( -
)MAX (Ad, Bd) MAX(Ai+1, Bi+1) Multiplikation( *
)Ad+Bd Ai+Bi Division (/) Ad Ai+Bd Tabelle 25: Berechnung der ganzzahligen Stellen und der Dezimalziffernstellenin Zwischenergebnissen
i
= errechnete ganzzahlige Stellen
Ai
= ganzzahlige Stellen im ersten Operanden
Bi
= ganzzahlige Stellen im zweiten Operanden
d
= errechnete Dezimalstellen
Ad
= Dezimalstellen im ersten Operanden
Bd
= Dezimalstellen im zweiten Operanden
Fd
= Dezimalstellen im Endergebnis
MAX
= der jeweils größere Wert der angegebenen Operanden
Enthält das Ergebnisfeld (i+d) mehr als 31 Stellen, dann wird in den meisten Fällen mit Gleitpunktarithmetik gerechnet.
Ferner werden in Gleitpunktarithmetik durchgeführt:
Potenzierung
Divisionen, die in Argumenten von internen Standard-Funktionen angegeben sind