我有一个非常简单的虚拟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.
当我在大型机上编译此代码(使用MVS Enterprise COBOL V4.2编译器)并执行它时,我得到“NUM-C IS 100”,可能是因为(399/100)被视为3,而不是3.99计算(211/100也是如此)。
但是,当我在PC上(使用GnuCobol编译器)编译相同的精确代码并执行它时,我得到“NUM-C IS 188”。
PC的答案是正确的,但是我想使其表现得与大型机类似(因此,在该计算语句中失去了精确度,从而得到100而不是188)...我该怎么做?
上面的原因是该代码的一般表达:
COMPUTE PDISCR = (((((X(1) + DX - XBRAK) * (ABRAK(1) / 1000)) / 100)
+ PHT(1) + DPH - PHBRAK) * 2) + ((V(1) + DV
+ VBRAKMPM) * (V(1) + DV - VBRAKMPM) / 100000))
这是已有50年历史的Train模拟程序的一部分,我需要将其迁移到GnuCOBOL。 COMPUTE中使用的所有字段都是整数。我需要能够从GnuCOBOL获得相同的答案。
已确认OpenCOBOL/GnuCOBOL最高为2.0。
最佳答案
https://lwn.net/Articles/733129/
该链接提到了gnuCobol 2.2的新std选项:ibm-strict。我想知道这是否会迫使compute语句执行您想要的操作。
关于COBOL-对于相同的COMPUTE,从大型机到PC的答案不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39854413/