[ABAP] ABAP-Mathematik Bibliothek (cl_abap_math)

* min/max der Numerischen Typen
WRITE: / |{ cl_abap_math=>max_int4 STYLE = SCIENTIFIC }|.
WRITE: / |{ cl_abap_math=>min_int4 STYLE = SCIENTIFIC }|.
WRITE: / |{ cl_abap_math=>max_int8 STYLE = SCIENTIFIC }|.
WRITE: / |{ cl_abap_math=>min_int8 STYLE = SCIENTIFIC }|.
WRITE: / |{ cl_abap_math=>max_decfloat16 STYLE = SCIENTIFIC }|.
WRITE: / |{ cl_abap_math=>min_decfloat16 STYLE = SCIENTIFIC }|.
WRITE: / |{ cl_abap_math=>max_decfloat34 STYLE = SCIENTIFIC }|.
WRITE: / |{ cl_abap_math=>min_decfloat34 STYLE = SCIENTIFIC }|.

* float
DATA: lv_fv TYPE f VALUE '1.005'.
* Auf 15 Dezimalstellen gerundeter Wert
WRITE: / |{ cl_abap_math=>round_f_to_15_decs( lv_fv ) DECIMALS = 2 }|.

* Scale und Anzahl Stellen
DATA: lv_dec TYPE decfloat34 VALUE '1234.56789'.
* Liefert die Scale einer DECFLOAT-Zahl
WRITE: / cl_abap_math=>get_scale( lv_dec ).
* Anzahl der signifikanten Stellen einer DECFLOAT Zahl
WRITE: / cl_abap_math=>get_number_of_digits( lv_dec ).

[ABAP] Minimum / Maxium von zwei Zahlen ermitteln

DATA(it_values1) = VALUE int4_table( ( 1 ) ( 2 ) ( 3 ) ).
DATA(it_values2) = VALUE int4_table( ( 1 ) ( 5 ) ( 2 ) ).

DO lines( it_values1 ) TIMES.
  DATA(lv_min) = nmin( val1 = it_values1[ sy-index ] val2 = it_values2[ sy-index ] ).
  DATA(lv_max) = nmax( val1 = it_values1[ sy-index ] val2 = it_values2[ sy-index ] ).
  WRITE: / it_values1[ sy-index ], it_values2[ sy-index ], 'MIN:', lv_min.
  WRITE: / it_values1[ sy-index ], it_values2[ sy-index ], 'MAX:', lv_max.
ENDDO.

[ABAP] Minimum/Maximum eines Datentyps ermitteln

* Variable deklarieren
DATA: lv_p TYPE p LENGTH 5 DECIMALS 2.

* Minimumwert ermitteln
DATA(lv_min) = cl_abap_exceptional_values=>get_min_value( lv_p ).
ASSIGN lv_min->* TO FIELD-SYMBOL(<min>).
IF <min> IS ASSIGNED.
  WRITE: / <min>.
ENDIF.

* Maximumwert ermitteln
DATA(lv_max) = cl_abap_exceptional_values=>get_max_value( lv_p ).
ASSIGN lv_max->* TO FIELD-SYMBOL(<max>).
IF <max> IS ASSIGNED.
  WRITE: / <max>.
ENDIF.

[ABAP] Numerische Funktionen

DATA: x TYPE decfloat16 VALUE '-10.67'.

* Absolutwert: 10.67
WRITE: / |  abs: { abs( x ) }|.
* Vorzeichen: -1
WRITE: / | sign: { sign( x ) }|.
* nächstgrößerer ganzzahliger Wert: -10
WRITE: / | ceil: { ceil( x ) }|.
* nächstkleinerer ganzzahliger Wert: -11
WRITE: / |floor: { floor( x ) }|.
* Vorkommateil: -10
WRITE: / |trunc: { trunc( x ) }|.
* Nachkommateil: -0.67
WRITE :/ | frac: { frac( x ) }|.
* Ganzzahlige Potenzfunktion: x^n, wobei n >= 0: 113.8489
WRITE :/ | ipow: { ipow( base = x exp = 2 ) }|.
* Rundungsfunktion: -10.7
WRITE :/ |round: { round( val = x dec = 1 ) }|.
* Arcuscosinus [-1,1]
WRITE :/ | acos: { acos( '0.5' ) }|.
* Arcussinus [-1,1]
WRITE :/ | asin: { asin( '0.5' ) }|.
* Arcustangens
WRITE :/ | atan: { atan( '0.5' ) }|.
* Cosinus
WRITE :/ |  cos: { cos( '0.5' ) }|.
* Sinus
WRITE :/ |  sin: { sin( '0.5' ) }|.
* Tangens
WRITE :/ |  tan: { tan( '0.5' ) }|.
* Hyperbelcosinus
WRITE :/ | cosh: { cosh( '0.5' ) }|.
* Hyperbelsinus
WRITE :/ | sinh: { sinh( '0.5' ) }|.
* Hyperbeltangens
WRITE :/ | tanh: { tanh( '0.5' ) }|.
* Exponentialfunktion zur Basis e und x->[-709, 709] für Typ f und x->[-14144, 14149] für Typ decfloat34
WRITE :/ |  exp: { exp( x ) }|.
* natürlicher Logarithmus; x > 0
WRITE :/ |  log: { log( 2 ) }|.
* Logarithmus zur Basis 10; x > 0
WRITE :/ |log10: { log10( 2 ) }|.
* Quadratwurzel X >= 0
WRITE :/ | sqrt: { sqrt( 4 ) }|.