Ansicht
Dokumentation
ABAPCOMPUTE_ARITH - COMPUTE ARITH
BAL Application Log Documentation rdisp/max_wprun_time - Maximum work process run timeDiese Dokumentation steht unter dem Copyright der SAP AG.
Arithmetische Ausdrücke ()
... $[+$|-$] operand1
$[${+$|-$|*$|/$|DIV$|MOD$|**$} $[+$|-$] operand2
$[${+$|-$|*$|/$|DIV$|MOD$|**$} $[+$|-$] operand3
... $]$] ...
Wirkung
Ein arithmetischer Ausdruck formuliert eine Berechnung. Das Ergebnis eines arithmetischen Ausdrucks ist ein numerischer Wert, der in dem Rechentyp vorliegt, der dem arithmetischen Ausdruck zugeordnet ist. In einem arithmetischen Ausdruck arith_exp kann ein Operand operand1 über die arithmetischen Operatoren +, -, *, /, DIV, MOD oder ** mit einem oder mehreren Operanden operand2, operand3 ... Kombiniert werden, wobei Klammerungen möglich sind. Die Berechnung basiert auf Rechenregel, die vom jeweiligen Rechentyp abhängig sind.
Arithmetische Ausdrücke können an den Lesepositionen bestimmter Anweisungen und insbesondere auf der rechten Seite einer Zuweisung mit dem Zuweisungsoperator = vorkommen. Als Operand des Lossless-Operators EXACT kann ein arithmetischer Ausdruck auf eine verlustfreie Berechnung überprüft werden.
Die Operandenpositionen operand sind allgemeine Ausdruckspositionen, d.h. es können numerische Datenobjekte, eingebaute Funktionen, funktionale Methoden oder geklammerte arithmetische Ausdrücke angegeben werden. Die arithmetischen Operatoren +, -, *, /, DIV, MOD und ** kombinieren zwei benachbarte Operanden. Bei der Auswertung des Ausdrucks wird daraus ein numerischer Wert berechnet, der mit dem nächsten benachbarten Operanden kombiniert wird. Die Priorität der Kombinierung richtet sich nach den verwendeten Operatoren.
Vor jedem Operanden können ein oder mehrere durch Leerzeichen getrennte Vorzeichen + oder - in beliebiger Reihenfolge stehen. Jedes Vorzeichen wirkt so, als sei an seiner Stelle der Ausdruck +1 * bzw. -1 * angegeben, wodurch ein Vorzeichen die gleiche Priorität wie eine Multiplikation hat.
Wenn funktionale Methoden oder
zeichenartige
Ausdrücke als Operanden angegeben sind, werden diese vor der Auswertung des gesamten übrigen
Ausdrucks von links nach rechts und von innen nach außen ausgeführt. Die Rückgabewerte werden für die Verwendung an den entsprechenden Operandenpositionen zwischengespeichert.
Zeichenartige Verarbeitungsfunktionen und
Zeichenkettenausdrücke sind dabei nur als Argumente von
Beschreibungsfunktionen möglich.
Hinweise
- Es ist darauf zu achten, dass in einer angegebenen funktionalen Methode der Wert eines Datenobjekts geändert wird, das ebenfalls als Operand verwendet wird. Selbst wenn ein solcher Operand links von der funktionalen Methode steht, wird sein Wert immer vor seiner Auswertung von der Methode geändert.
- Arithmetische Ausdrücke, Zeichenkettenausdrücke und Bit-Ausdrücke sind nicht mischbar. Eingebaute Funktionen, die als Operanden arithmetischer Ausdrücke verwendet werden, können aber Zeichenkettenausdrücke oder Bit-Ausdrücke als Argumente enthalten.
- Wenn bei einer der überladenenen numerischen Funktionen ein arithmetischer Ausdruck als Argument angegeben ist, wirkt die gesamte Funktion wie ein arithmetischer Ausdruck.
- Ein einfacher arithmetischer Ausdruck +$|- literal, der sich aus einem Operator +$|-, Leerzeichen und einem vorzeichenlosen Zahlenliteral literal zusammensetzt, hat den gleichen Wert wie das entsprechende Zahlenliteral +$|-literal mit direkt vorangestelltem Vorzeichen. Da der Ausdruck aber als solcher behandelt und immer erst zur Laufzeit ausgewertet wird, sollte in solchen Fällen aus Gründen der Performance immer das Zahlenliteral verwendet werden.
- Die obige Regel, die die Auswertung von funktionalen Methoden oder
zeichenartigen Ausdrücken angibt, kann zu überraschenden Ergebnissen führen.
Beispiel
Dieser Programmabschnitt berechnet den Hyperbelsinus mit der Eulerschen Formel im expliziten Rechentyp decfloat34 und mit der
eingebauten Funktion sinh im impliziten Rechentyp f und gibt den Unterschied aus.
Beispiel
Folgendes Programm demonstriert die Regel, die die Auswertung von
funktionalen
Methoden in arithmetischen Ausdrücken bestimmt. Die erste Berechnung setzt die Variable changing
auf 6 and gibt das erwartete Ergebnis 9 zurück. Das Ergebnis der zweiten Berechnung ist 15 und
nicht, wie man erwarten könnte, 10. Die funktionale Methode wird zuerst aufgerufen and ihre Ergebnis
9 wird zum geänderten Wert 6 von der Variablen changing addiert und nicht zu ihrem initialen Wert 1.
Ausnahmen
Behandelbare Ausnahmen
-
Ursache: Unzulässiger Aufruf von acos
Laufzeitfehler: COMPUTE_ACOS_DOMAIN (abfangbar) -
Ursache: Unzulässiger Aufruf von asin
Laufzeitfehler: COMPUTE_ASIN_DOMAIN (abfangbar)
-
Ursache: Unzulässiger Aufruf von cos
Laufzeitfehler: COMPUTE_COS_DOMAIN (abfangbar) -
Ursache: Unzulässiger Aufruf von log10
Laufzeitfehler: COMPUTE_LOG10_ERROR (abfangbar) -
Ursache: Unzulässiger Aufruf von log
Laufzeitfehler: COMPUTE_LOG_ERROR (abfangbar) -
Ursache: Unzulässiges Argument bei Potenzierung
Laufzeitfehler: COMPUTE_POW_DOMAIN (abfangbar) -
Ursache: Unzulässiger Aufruf von sin
Laufzeitfehler: COMPUTE_SIN_DOMAIN (abfangbar) -
Ursache: Unzulässiger Aufruf von sqrt
Laufzeitfehler: COMPUTE_SQRT_DOMAIN (abfangbar) -
Ursache: Unzulässiger Aufruf von tan
Laufzeitfehler: COMPUTE_TAN_DOMAIN (abfangbar)
-
Ursache: Überlauf bei arithmetischer Operation (Typ p)
Laufzeitfehler: BCD_OVERFLOW (abfangbar) -
Ursache: Überlauf bei arithmetischer Operation (alle Operanden Typ p)
Laufzeitfehler: COMPUTE_BCD_OVERFLOW (abfangbar) -
Ursache: Überlauf bei cosh
Laufzeitfehler: COMPUTE_COSH_OVERFLOW (abfangbar) -
Ursache: Über- oder Unterlauf bei exp
Laufzeitfehler: COMPUTE_EXP_RANGE (abfangbar) -
Ursache: Überlauf bei Addition (Typ decfloat)
Laufzeitfehler: COMPUTE_DECFLOAT_ADD_OVERFLOW -
Ursache: Überlauf bei Subtraktion (Typ decfloat)
Laufzeitfehler: COMPUTE_DECFLOAT_SUB_OVERFLOW -
Ursache: Überlauf bei Multiplikation (Typ decfloat)
Laufzeitfehler: COMPUTE_DECFLOAT_MUL_OVERFLOW -
Ursache: Überlauf bei Division (Typ decfloat)
Laufzeitfehler: COMPUTE_DECFLOAT_DIV_OVERFLOW -
Ursache: Überlauf bei Division (Typ decfloat)
Laufzeitfehler: COMPUTE_DECFLOAT_DIV_OVERFLOW -
Ursache: Überlauf bei Division (Typ f)
Laufzeitfehler: COMPUTE_FLOAT_DIV_OVERFLOW (abfangbar) -
Ursache: Überlauf bei Subtraktion
(Typ f)
Laufzeitfehler: COMPUTE_FLOAT_MINUS_OVERFLOW (abfangbar) -
Ursache: Überlauf bei Addition (Typ f)
Laufzeitfehler: COMPUTE_FLOAT_PLUS_OVERFLOW (abfangbar) -
Ursache: Überlauf bei Multiplikation
(Typ f)
Laufzeitfehler: COMPUTE_FLOAT_TIMES_OVERFLOW (abfangbar) -
Ursache: Überlauf bei |-2147483648|
Laufzeitfehler: COMPUTE_INT_ABS_OVERFLOW (abfangbar) -
Ursache: Ganzzahl-Überlauf bei Division
Laufzeitfehler: COMPUTE_INT_DIV_OVERFLOW (abfangbar) -
Ursache: Ganzzahl-Überlauf bei Subtraktion
Laufzeitfehler: COMPUTE_INT_MINUS_OVERFLOW (abfangbar) -
Ursache: Ganzzahl-Überlauf bei Addition
Laufzeitfehler: COMPUTE_INT_PLUS_OVERFLOW (abfangbar) -
Ursache: Ganzzahl-Überlauf bei Multiplikation
Laufzeitfehler: COMPUTE_INT_TIMES_OVERFLOW (abfangbar) -
Ursache: Unzulässiger Aufruf von log10
Laufzeitfehler: COMPUTE_LOG10_ERROR (abfangbar) -
Ursache: Unzulässiger Aufruf von log
Laufzeitfehler: COMPUTE_LOG_ERROR (abfangbar) -
Ursache: Über- oder Unterlauf bei Potenzierung
Laufzeitfehler: COMPUTE_POW_RANGE (abfangbar) -
Ursache: Überlauf bei sinh
Laufzeitfehler: COMPUTE_SINH_OVERFLOW (abfangbar) -
Ursache: Überlauf bei Funktion round oder rescale
Laufzeitfehler: COMPUTE_ROUND_RESCALE_OVERFLOW
-
Ursache: Operand nicht als Zahl interpretierbar
Laufzeitfehler: CONVT_NO_NUMBER (abfangbar)
-
Ursache: Überlauf bei arithmetischer Operation (Typ p, mit spezifizierter Länge)
Laufzeitfehler: BCD_FIELD_OVERFLOW (abfangbar) -
Ursache: Operand zu groß oder (Zwischen-)Ergebnis zu groß
Laufzeitfehler: CONVT_OVERFLOW (abfangbar)
-
Ursache: Ergebnis von cos ungenau
Laufzeitfehler: COMPUTE_COS_LOSS (abfangbar) -
Ursache: Ergebnis von sin ungenau
Laufzeitfehler: COMPUTE_SIN_LOSS (abfangbar) -
Ursache: Ergebnis von tan ungenau
Laufzeitfehler: COMPUTE_TAN_LOSS (abfangbar)
-
Ursache: Unzulässige Funktion für Rechentyp decfloat34
Laufzeitfehler: COMPUTE_UNSUPPORTED_DECF_FUNC
-
Ursache: Division durch 0 (Typ p)
Laufzeitfehler: BCD_ZERODIVIDE (abfangbar) -
Ursache: Division durch 0 (Typ f)
Laufzeitfehler: COMPUTE_FLOAT_ZERODIVIDE (abfangbar) -
Ursache: Division durch 0 (Typ i)
Laufzeitfehler: COMPUTE_INT_ZERODIVIDE (abfangbar) -
Ursache: Division durch 0 (Typ decfloat)
Laufzeitfehler: COMPUTE_DECFLOAT_ZERODIVIDE
Unbehandelbare Ausnahmen
-
Ursache: p-Feld enthält kein korrektes BCD-Format
Laufzeitfehler: BCD_BADDATA -
Ursache: p-Feld enthält kein korrektes Vorzeichen
Laufzeitfehler: BCD_NO_SIGN
General Material Data ROGBILLS - Synchronize billing plans
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 18351 Date: 20240425 Time: 032235 sap01-206 ( 343 ms )