나는 더미 COMPUTE를 수행하고 결과를 표시하는 아주 간단한 더미 COBOL 프로그램을 가지고 있습니다. I는 (컴파일러 MVS 엔터프라이즈 COBOL V4.2)와 메인 프레임에이 코드를 컴파일하고 실행할 때COBOL - 동일한 COMPUTE에 대한 메인 프레임에서 다른 대답
ID DIVISION.
PROGRAM-ID. DUMMYPGM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM-A PIC 9(3) VALUE 399.
01 NUM-B PIC 9(3) VALUE 211.
01 NUM-C PIC 9(3).
*
PROCEDURE DIVISION.
MAIN.
COMPUTE NUM-C = ((NUM-A/100) - (NUM-B/100)) * 100
DISPLAY 'NUM-C IS ' NUM-C
STOP RUN.
는 아마도 때문에 (100분의 399)가 취급되는 "NUM-C는 100"GET 계산에서 3.99 대신 3을 사용합니다 (211/100도 마찬가지).
그러나 동일한 정확한 코드를 GnuCobol 컴파일러로 PC에서 컴파일하고 실행하면 "NUM-C IS 188"이됩니다. PC의 대답은 정확하지만 메인 프레임처럼 동작하도록하고 싶습니다. (따라서 188 대신 100을주는 계산 문에서 정밀도를 잃어 버립니다 ...) 어떻게하면됩니까?
COMPUTE PDISCR = (((((X(1) + DX - XBRAK) * (ABRAK(1)/1000))/100)
+ PHT(1) + DPH - PHBRAK) * 2) + ((V(1) + DV
+ VBRAKMPM) * (V(1) + DV - VBRAKMPM)/100000))
이 내가 GnuCOBOL로 마이그레이션해야하는 50 세의 기차 시뮬레이션 프로그램의 일부입니다
위의 이유는이 코드의 일반적인 표현이다. COMPUTE에 사용 된 모든 필드는 정수입니다. 나는 GnuCOBOL에서 같은 대답을 얻을 수 있어야합니다.
최대 2.0까지의 OpenCOBOL/GnuCOBOL에 대해 확인되었습니다.
오해를 불러 와서 미안합니다. 복잡한 것은 하나의 계산으로 몇 가지 연산을 의미합니다 (여기에는 2 개의 division과 하나의 연산 대신 하나의 곱셈이 있음). 나는이 코드가별로 좋지 않다는 것을 알고 있지만 개념의 증거 일뿐입니다. 나는 전혀 우월하거나 무엇이든지 소리 치기를 원했기 때문에 나는 내 글을 편집했다. –
GnuCOBOL 릴리스는 cobc -V를 썼고 다음과 같이 표시했습니다. cobc (OpenCOBOL) 1.1.0 Copyright (C) 2001-2009 Keisuke Nishida/Roger While Built Sep 10 2010 10:12:33 포장 된 2 월 06 2009 10:30:55 CET –
나는 가능한 해결책이 다른 정수 변수에서 계산의 모든 단계를 분리하는 것이지만보다 나은 해결책을 찾고 싶다. 왜냐하면 여기에있는 코드에서 COMPUTE 문을 예로 들었기 때문이다. 작업중 : COMPUTE PDISCR = ((((1) + DX-XBRAK) * (ABRAK (1)/1000)) /100) + PHT (1) + DPH-PHBRAK) * 2) + (V (1) + DV + VBRAKMPM) * (V (1) + DV - VBRAKMPM)/100000)) –