我無法理解什麼是這些線背後的邏輯:邏輯
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,所以即使它應該是「查看最大值是否工作」,那麼它也是關閉的。 –