PL/I math service examples

Table 1 shows code examples of calling various math services from PL/I.

Table 1. PL/I examples
Function called Code example
Modular arithmetic and log base e (CEESIMOD and CEESSLOG)
PLIMATH: PROC OPTIONS(MAIN);

   DCL CEESSLOG ENTRY OPTIONS(ASM) EXTERNAL;
   DCL CEESIMOD ENTRY OPTIONS(ASM) EXTERNAL;

   DCL ARG1  RESULT REAL FLOAT DEC (6);
   DCL ARGM1 ARGM2  RES2 FLOAT BINARY(21)
   DCL FC    CHARACTER (12);

  /* Call log base e routine, which has    */
  /* only one input parameter              */
   CALL CEESSLOG (ARG1, FC, RESULT)

   IF ( FC = '000000000000000000000000'X )
     THEN DO;
       PUT SKIP LIST
          ( 'Error occurred in call to CEESSLOG.' );
     ELSE;

  /* Call modular arithmetic routine,      */
  /* which has two input parameters        */
   CALL CEESIMOD (ARGM1, ARGM2, FC, RES2);

   IF ( FC = '000000000000000000000000'X )
     THEN DO;
       PUT SKIP LIST
          ( 'Error occurred in call to CEESIMOD.' );
     ELSE;
   END;
Double-precision complex tangent (CEESETAN)
 TRYETAN:  PROCEDURE OPTIONS( MAIN );

    DECLARE FC           CHARACTER(12);
    DECLARE PARM1        COMPLEX FLOAT BINARY(53);
    DECLARE RESULT       COMPLEX FLOAT BINARY(53);

    DECLARE CEESETAN     ENTRY(COMPLEX FLOAT BINARY(53),
                            *, COMPLEX FLOAT BINARY(53))
                            OPTIONS(ASSEMBLER) EXTERNAL;

    PARM1 = COMPLEX(7,1.1);
    CALL CEESETAN ( PARM1, FC, RESULT);
    IF ( FC ¬= '000000000000000000000000'X) THEN
          PUT SKIP LIST( 'Error in call to CEESETAN.');
    ELSE
          PUT SKIP LIST( 'Result is ' || RESULT);
 END TRYETAN;