计算:发生低阶截断时发出警告
Compute: Warn when low-order truncation occurs
我有一个指定为
的结果字段
01 MY-RESULT VALUE +0 USAGE COMP-3 PIC S9(13)V99
假设我将两个因数相乘:
COMPUTE MY-RESULT = A * B
在 MY-RESULT
中检测低阶截断的最佳方法是什么?
例如。当 A=B=2.01
.
ON SIZE ERROR
子句未触发。
适用于所有供应商甚至最古老的编译器的东西(因为您没有指定任何方言,这似乎是最重要的部分os):如果重要,请使用额外的目标字段更多小数点 pos 并在之后检查是否相等:
COMPUTE MY-RESULT RESULT-WITH-MORE-DECIMALS = A * B
IF MY-RESULT NOT = RESULT-WITH-MORE DECIMALS
...
END-IF
ON SIZE ERROR
将 仅 被跟踪以进行上截断。
如果这个 2014 功能 os 可用于您的编译器,您可以使用 INTERMEDIATE ROUNDING IS PROHIBITED
(草案将其作为 ROUNDED-MODE PROHIBITED
),它将向您显示此问题(如果 EC-SIZE-TRUNCATION
异常已启用)。当心一个部分:这是 "fatal" 类别的例外...
我有一个指定为
的结果字段01 MY-RESULT VALUE +0 USAGE COMP-3 PIC S9(13)V99
假设我将两个因数相乘:
COMPUTE MY-RESULT = A * B
在 MY-RESULT
中检测低阶截断的最佳方法是什么?
例如。当 A=B=2.01
.
ON SIZE ERROR
子句未触发。
适用于所有供应商甚至最古老的编译器的东西(因为您没有指定任何方言,这似乎是最重要的部分os):如果重要,请使用额外的目标字段更多小数点 pos 并在之后检查是否相等:
COMPUTE MY-RESULT RESULT-WITH-MORE-DECIMALS = A * B
IF MY-RESULT NOT = RESULT-WITH-MORE DECIMALS
...
END-IF
ON SIZE ERROR
将 仅 被跟踪以进行上截断。
如果这个 2014 功能 os 可用于您的编译器,您可以使用 INTERMEDIATE ROUNDING IS PROHIBITED
(草案将其作为 ROUNDED-MODE PROHIBITED
),它将向您显示此问题(如果 EC-SIZE-TRUNCATION
异常已启用)。当心一个部分:这是 "fatal" 类别的例外...