아래 계산식으로 독립 실행 형 Enterprise COBOL 프로그램을 실행하고 있습니다. 여러 작업을 수행하는 COMPUTE가 있고 전체 계산이 분할되어 있습니다. 그러나 두 경우 모두 결과가 다릅니다 (마지막 4 자리 숫자).COBOL COMPUTE 계산
계산기를 사용하여 수동으로 계산 한 결과가 분할 된 COMPUTE 문과 일치합니다. 중간 결과에서 전체 답을 사용하고 최종 답안의 15 자리 만 사용하고 모든 중간 단계에서 반올림하지 않고 15 자리 만 사용하여 계산을 시도했습니다. 그러나 이러한 결과 중 어느 것도 COMPUTE 결과와 결합되지 않습니다.
왜 그런 차이가 있는지 이해할 수있는 사람이 있습니까? 지난 컴퓨팅의
05 WS-A PIC S9(3)V9(15) COMP.
05 WS-B PIC S9(3)V9(15) COMP.
05 WS-C PIC S9(3)V9(15) COMP.
05 WS-D PIC S9(3)V9(15) COMP.
05 WS-E PIC S9(3)V9(15) COMP.
05 WS-RES PIC S9(3)V9(15) COMP.
05 RES-DISP PIC -9(2).9(16).
MOVE 3.56784 TO WS-A.
MOVE 1.3243284234 TO WS-B.
MOVE .231433897121334834 TO WS-C.
MOVE 9.3243243213 TO WS-D.
MOVE 7.0 TO WS-E.
COMPUTE WS-RES = WS-A/WS-B.
MOVE WS-RES TO RES-DISP.
COMPUTE WS-RES = WS-RES/WS-C.
MOVE WS-RES TO RES-DISP.
COMPUTE WS-RES = WS-RES/(WS-D + WS-E).
MOVE WS-RES TO RES-DISP.
COMPUTE WS-RES = WS-RES * (WS-C - WS-A)
MOVE WS-RES TO RES-DISP.
COMPUTE WS-RES = WS-RES + WS-E ** WS-B
MOVE WS-RES TO RES-DISP.
COMPUTE WS-RES = WS-RES + WS-D.
MOVE WS-RES TO RES-DISP.
결과 = 결합 컴퓨팅의 20.1030727225138740
COMPUTE WS-RES = WS-A/WS-B/WS-C/
(WS-D + WS-E) * (WS-C - WS-A) +
WS-E ** WS-B + WS-D.
MOVE WS-RES TO RES-DISP.
결과 = 20.1030727225138680
답변을 업데이트했습니다.보고있는 실제 문제라고 생각되는 지수화가있는 미묘한 점이 있습니다. 당신이 가지고있는 가치와 계산으로, 나는 당신이 가지고있는 것을 넘어선 주문 문제를 생각하지 않습니다. 왜 진단 메시지가 없는지 궁금 해서요. 내가 찾은 것 같아요. –
이 특별한 상황은 어셈블리 목록 (목록)이 도움이 될 수있는 때입니다. 컴파일러가 생성하는 코드를 이해하면 결과를 이해하는 데 도움이됩니다. 최적화 또한 상황을 왜곡 할 수 있지만 C 및 PL/I와 동일한 코드 생성기를 사용하므로이 문제는 Enterprise COBOL 5.1에서 더 많은 문제가 될 것이라고 생각합니다. "재미"에 대해서는 원래 코드를 가져 와서 생성 된 코드를 비교합니다.Bill은 아래에서 이미 좋은 대답을 가지고 있으며 여기에 표시된 모든 코드 (원본 및 솔루션)와 생성 된 코드를 비교하면 컴파일러가 작동하는 방식을 더 잘 이해할 수 있습니다. – zarchasmpgmr