我无法理解什么是这些线背后的逻辑:逻辑
COMPUTE temp = RESULT - 1.843E19.
IF temp IS LESS THAN 1.0E16 THEN
数据定义:
000330 01 VAR1 COMP-1 VALUE 3.4E38. // 3.4 x 10^38
以下是在上下文中的线(子程序返回平方根):
MOVE VAR1 TO PARM1.
CALL "SQUAREROOT_ROUTINE" USING
BY REFERENCE PARM1,
BY REFERENCE RESULT.
COMPUTE temp = RESULT - 1.843E19.
IF temp IS LESS THAN 1.0E16 THEN
DISPLAY "OK"
ELSE
DISPLAY "False"
END-IF.
感谢piet.t,这里还有一个问题 一个cosine_routine被称为,3.4E38传递到例程,它返回结果
COMPUTE temp_var = -0.915 - RESULT
IF temp_var IS LESS THAN 0.001 THEN
DISPLAY "true"
ELSE
DISPLAY "false"
END-IF.
为什么-0.915被使用? COS(3.4E + 38)= -0.93969262078590838405410927732473
我们不能真正回答这个问题。编写代码的人知道(但可能不记得)。外部文档中可能有某些内容(来自业务需求的任何内容)。代码是否过时?自从VS COBOL II Release 3以来,在COBOL中有平方根和余弦的内在函数。对我而言,这些数字过于“接近”,可能会导致浮点值的错误表示。我没有看到尽可能的距离值本身只有三位或四位小数。如果浮点数很差,我们就会真正塞满。 –
COMP-2可以精确地表示15位有效数字。 COMP-2与ARITH(EXTEND)甚至更多。我没有看到COMP-1只给出四位有效数字中的三位的准确性。 –
只要注意到3.4E38作为“浮动”的最大值给出。你真的在大型机上运行吗?最初是为大型机编写的程序吗? z/OS上的浮点值的范围是5.4e-79到7.2e + 75,所以即使它应该是“查看最大值是否工作”,那么它也是关闭的。 –