そういや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.