中间结果和算术精度

编译器将算术语句作为根据运算符优先顺序执行的一系列操作来处理,并设置中间字段以包含这些操作的结果。 编译器使用算法来确定要保留的整数和小数位数。

在以下情况下可获得中间结果:

  • 在包含多个紧跟在动词后面的操作数的 ADDSUBTRACT 语句中
  • 在指定一系列算术运算或多个结果字段的 COMPUTE 语句中
  • 在包含在条件语句或引用修改规范中的算术表达式中
  • 在使用 GIVING 选项和多个结果字段的 ADDSUBTRACTMULTIPLYDIVIDE 语句中
  • 在使用内部函数作为操作数的语句中

示例:中间结果的计算

中间结果的精度取决于您是使用缺省选项 ARITH(COMPAT) (称为 兼容性方式) 进行编译,还是使用 ARITH(EXTEND) (称为 扩展方式)ARITH(FULL) (称为 完全方式)进行编译。

在兼容模式下,算术运算的运算结果与 IBM® COBOL Set for Linux® 中的运算结果相同:

  • 对于定点中间结果,最多使用 30 位数字。
  • 浮点内部函数返回长精度 (64 位) 浮点结果。
  • 包含浮点操作数,小数指数或浮点内部函数的表达式将进行求值,就像所有不在浮点中的操作数都转换为长精度浮点和浮点运算用于对表达式求值一样。
  • 浮点文字和外部浮点数据项将转换为长精度浮点以进行处理。

在扩展方式 或完全方式中,算术运算的求值具有以下特征:

  • 对于定点中间结果,最多使用 31 位数字。
  • 浮点内部函数返回扩展精度 (128 位) 浮点结果。
  • 将对包含浮点操作数,小数指数或浮点内在函数的表达式进行求值,就像将所有不在浮点中的操作数转换为扩展精度浮点和使用浮点运算来对表达式进行求值一样。
  • 浮点文字和外部浮点数据项将转换为扩展精度浮点以进行处理。

扩展模式和完整模式之间的区别,请参阅定点数据和中间结果