Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

COBOLの小数点演算

qiita.com

そういやCOBOLはどうなんだっけ?ということで確認。 やっぱり除算は鬼門で、できるだけ乗算で処理できるように仕様を決めるのがベターということでしょうね。

IDENTIFICATION DIVISION.
PROGRAM-ID. DECUMALTEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RESULT PIC 9(1)V9(37) VALUE 0.0.

PROCEDURE DIVISION.
  INITIALIZE RESULT.
  COMPUTE RESULT = 0.1 + 0.1 + 0.1.
  DISPLAY "0.1 + 0.1 + 0.1 = "RESULT.
  IF RESULT = 0.3 THEN
    DISPLAY "0.1 + 0.1 + 0.1 IS EQUAL TO 0.3."
  ELSE
    DISPLAY "0.1 + 0.1 + 0.1 IS NOT EQUAL TO 0.3."
  END-IF.

  INITIALIZE RESULT.
  COMPUTE RESULT = 4.8 - 4.7 - 0.1.
  DISPLAY "4.8 - 4.7 - 0.1 = "RESULT.
  IF RESULT = 0.0 THEN
    DISPLAY "4.8 - 4.7 - 0.1 IS EQUAL TO 0.0."
  ELSE
    DISPLAY "4.8 - 4.7 - 0.1 IS NOT EQUAL TO 0.0."
  END-IF.

  INITIALIZE RESULT.
  COMPUTE RESULT = (1.0 / 3.0) * 3.0.
  DISPLAY "(1.0 / 3.0) * 3.0 = "RESULT.
  IF RESULT = 1.0 THEN
    DISPLAY "(1.0 / 3.0) * 3.0 IS EQUAL TO 1.0."
  ELSE
    DISPLAY "(1.0 / 3.0) * 3.0 IS NOT EQUAL TO 1.0."
  END-IF.
STOP RUN.
0.1 + 0.1 + 0.1 = 0.3000000000000000000000000000000000000
0.1 + 0.1 + 0.1 IS EQUAL TO 0.3.
4.8 - 4.7 - 0.1 = 0.0000000000000000000000000000000000000
4.8 - 4.7 - 0.1 IS EQUAL TO 0.0.
(1.0 / 3.0) * 3.0 = 0.9999999999999999999999999999999999999
(1.0 / 3.0) * 3.0 IS NOT EQUAL TO 1.0.