воскресенье, 4 октября 2015 г.

Negative numbers in integer division

Решил проверить как работают операции целочисленного деления и остаток от целочисленного деления. Для этого написал небольшую программу:

REPORT z_test_integer_division.

CLASS lcl_controller DEFINITION ABSTRACT FINAL.
  PUBLIC SECTION.
    CLASS-METHODS:
      main.
ENDCLASS.

CLASS lcl_controller IMPLEMENTATION.
  METHOD main.
    " Test integer division and remainder of integer division operators.
    DATA:
      a TYPE i,
      b TYPE i,
      TYPE i.

    a 9.
    b 7.
    DIV b.
    WRITE'Result of 'a' DIV 'b' = 'c.
    a -9.
    b 7.
    DIV b.
    WRITE'Result of 'a' DIV 'b' = 'c.
    a 9.
    b -7.
    DIV b.
    WRITE'Result of 'a' DIV 'b' = 'c.
    a -9.
    b -7.
    DIV b.
    WRITE'Result of 'a' DIV 'b' = 'c.

    a 9.
    b 7.
    MOD b.
    WRITE'Result of 'a' MOD 'b' = 'c.
    a -9.
    b 7.
    MOD b.
    WRITE'Result of 'a' MOD 'b' = 'c.
    a 9.
    b -7.
    MOD b.
    WRITE'Result of 'a' MOD 'b' = 'c.
    a -9.
    b -7.
    MOD b.
    WRITE'Result of 'a' MOD 'b' = 'c.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  lcl_controller=>main).
 

Результат выполнения кода следующий:

Result of           9   DIV           7   =           1
Result of           9-  DIV           7   =           2
Result of           9   DIV           7-  =           1
Result of           9-  DIV           7-  =           2
Result of           9   MOD           7   =           2
Result of           9-  MOD           7   =           5
Result of           9   MOD           7-  =           2
Result of           9-  MOD           7-  =           5


Вывод по результата выполнения программы.
Используется метод отбрасывания дробной части с приближением к наименьшему целому. Знак ближайшего целого определяется по знаку первого операнда. Например, при отрицательном -9 результат деления будет -2, а не -1, т. к. в вещественных числах результат больше -1, а наименьшее целое как раз и будет -2.

Комментариев нет:

Отправить комментарий