ABAPCOMPUTE_ARITH - COMPUTE ARITH

RFUMSV00 - Advance Return for Tax on Sales/Purchases   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

arith_exp - Arithmetische Ausdrücke

Kurzreferenz



Syntax

... [+|-] 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 demRechentyp vorliegt,der dem arithmetischen Ausdruck zugeordnet ist. In einem arithmetischen Ausdruck arith_exp kann ein Operand operand1 über diearithmetischen Operatoren+, -, *, /, DIV, MOD oder ** mit einem oder mehreren Operanden operand2, operand3 ... verknüpft werden, wobeiKlammerungen möglichsind. Arithmetische Ausdrücke kommen in der Anweisung COMPUTE oder anLesepositionen bestimmter Anweisungen (seit Release 7.1) vor.

Die Operandenpositionen operand sind allgemeine Ausdruckspositionen, d.h. es können numerische Datenobjekte,eingebaute Funktionen,funktionale Methodenoder geklammerte arithmetische Ausdrücke angegeben werden. Die arithmetischen Operatoren +,-, *, /, DIV, MOD und ** verknüpfen zwei benachbarteOperanden. Bei der Auswertung des Ausdrucks wird daraus ein numerischer Wert berechnet, der mit demnächsten benachbarten Operanden verknüpft wird. Die Priorität der Verknüpfung richtet sich nach den verwendetenOperatoren.

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, oderzeichenartigeAusdrücke als Operanden angegeben sind, werden diese vor der Auswertung des gesamten übrigenAusdrucks von links nach rechts ausgeführt und die Rückgabewerte für die Verwendung an den entsprechenden Operandenpositionen zwischengespeichert.Zeichenartige Verarbeitungsfunktionen undZeichenkettenausdrücke sind dabei nur als Argumente vonBeschreibungsfunktionen möglich.

Hinweise

  • Es ist darauf zu achten, ob in einer angegebenen funktionalen Methode der Wert eines Datenobjekts geändertwird, 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 und Zeichenkettenausdrücke sind nicht mischbar.Beschreibungsfunktionen,die als Operanden arithmetischer Ausdrücke verwendet werden, können aber Zeichenkettenausdrücke als Argumente enthalten.


Beispiel

Dieser Programmabschnitt berechnet den Hyperbelsinus mit der Eulerschen Formel im Rechentyp decfloat16 und mit dereingebauten Funktion sinh im Rechentyp f und gibt den Unterschied aus.

DATA: x       TYPE i,
      result1 TYPE decfloat16,
      result2 TYPE f,
      diff    TYPE decfloat16.

DO 2001 TIMES.
  TRY.
      x = sy-index - 1001.
      result1 = ( ( exp( x ) - exp( -1 * x ) ) / 2 ).
      result2 = sinh( x ).
      diff    = abs( result1 - result2 ).
      IF diff <> 0.
        WRITE: / x, diff STYLE cl_abap_math=>scientific.
      ENDIF.
    CATCH cx_sy_conversion_overflow cx_sy_arithmetic_overflow.
  ENDTRY.
ENDDO.

Ausnahmen

Behandelbare Ausnahmen

CX_SY_ARG_OUT_OF_DOMAIN

  • 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)

CX_SY_ARITHMETIC_OVERFLOW

  • 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

CX_SY_CONVERSION_NO_NUMBER

  • Ursache: Operand nicht als Zahl interpretierbar
    Laufzeitfehler: CONVT_NO_NUMBER (abfangbar)

CX_SY_CONVERSION_OVERFLOW

  • 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)

CX_SY_PRECISION_LOSS

  • 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)

CX_SY_UNSUPPORTED_FUNCTION

  • Ursache: Unzulässige Funktion für Rechentyp decfloat34
    Laufzeitfehler: COMPUTE_UNSUPPORTED_DECF_FUNC

CX_SY_ZERODIVIDE

  • 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





CL_GUI_FRONTEND_SERVICES - Frontend Services   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.


Length: 16601 Date: 20120526 Time: 193013     triton ( 373 ms )