数字和算术运算

REXX 以尽可能自然的方式定义通常的算术运算 (加法,减法,乘法和除法)。 这真正的意思是,所遵循的规则是那些在学校和学院里进行常规教学的规则。

然而,在这些设施的设计过程中发现,不幸的是,这些规则因人而异 (确实比一般所欣赏的多得多) ,因地而异,因人而异,因人而异,因地而异,而且并非总是可以预测的。 因此,此处描述的算术是一种妥协,尽管不是最简单的) 应该在大多数应用程序中提供可接受的结果。

数字介绍

数字(即作为REXX算术运算和内置函数输入的字符串)可以非常灵活地表示。 允许使用前导和尾部空格,并且可以使用指数表示法。

一些有效的数字是:
    12         /* a whole number                      */
  '-76'        /* a signed whole number               */
    12.76      /* decimal places                      */
' +  0.003 '   /* blanks around the sign and so forth */
    17.        /* same as "17"                        */
      .5       /* same as "0.5"                       */
    4E9        /* exponential notation                */
     0.73e-7   /* exponential notation                */

在指数表示法中,一个数字包含一个指数,即使用该数字前需乘以10的幂次。 指数表示小数点的位置。 因此,在前面的例子中, 4E9 只是 4000000000 的简写,而 0.73e-70.000000073 的简写。

算术运算符包括加法( + )、减法( - )、乘法( * )、幂( ** )、除法( / )、前缀加( + )和前缀减( - )。此外,还有两个除法运算符:整数除( % )除以并返回整数部分;余数( // )除以并返回余数。

根据确定的规则,算术运算的结果被格式化为字符串。 其中最重要的规则如下:
  • 结果计算到最大有效数字(默认为 9 ,但您可以通过NUMERIC DIGITS指令更改此值,以获得所需的精度)。 因此,如果结果需要超过9位数字,通常会四舍五入到9位数字。 例如,2除以3的结果是 0.666666667 (需要无限多的数字才能达到完美的精确度)。
  • 除除法和幂运算外,保留小数点后的零(这与大多数流行的计算器不同,它们会删除结果小数部分的所有零)。 例如:
    2.40 + 2    ->    4.40
    2.40 - 2    ->    0.40
    2.40 * 2    ->    4.80
    2.40 / 2    ->    1.2
    这种行为在大多数计算中(尤其是财务计算)都是可取的。

    如有必要,您可以使用STRIP功能(见 STRIP )或除以1来删除尾随的零。

  • 零结果总是用一位数字 0 表示。
  • 指数形式用于根据数值和数字位数设置(默认为 9 )得出结果。 如果小数点前所需位数超过数字位数设置,或者小数点后所需位数超过数字位数设置的两倍,则该数字将以指数形式表示:
    1e6 * 1e6    ->    1E+12           /* not 1000000000000 */
    1 / 3E10     ->    3.33333333E-11  /* not 0.0000000000333333333 */

如何确定数值设置

要确定数字选项的当前设置,请使用内置函数DIGITS、FORM和FUZZ。 这些函数分别返回数字位数、数字格式和数字模糊度的当前设置。

算术运算中可能出现的错误

在算术运算中,可能会出现两种错误:
  • 溢出或下溢

    如果结果的指数部分超出语言处理器可以处理的范围,且结果是根据数字位数和数字格式的当前设置进行格式化的,则会发生此错误。 该语言定义了指数部分的最低能力,即以默认精度精确表示的最大整数。 因为默认精度为 9 , REXX for CICS® 支持指数范围 -999999999999999999

    因为这样允许(非常大的)指数,溢出或下溢被视为语法错误。

  • 存储器不足

    计算和中间结果需要存储空间,有时算术运算可能会因为存储空间不足而失败。 这通常被视为终止错误,而非计算错误。

算术设施的定义

以下主题给出了REXX语言算术功能的精确定义。