FM376.f Source File


Contents

Source Code


Source Code

      PROGRAM FM376

C***********************************************************************00010376
C*****  FORTRAN 77                                                      00020376
C*****   FM376                                                          00030376
C*****                       XATAN - (195)                              00040376
C*****                                                                  00050376
C***********************************************************************00060376
C*****  GENERAL PURPOSE                                     SUBSET REF  00070376
C*****    TEST INTRINSIC FUNCTION ATAN, ATAN2                 15.3      00080376
C*****    INTRINSIC FUNCTION SQRT ASSUMED WORKING            TABLE 5    00090376
C*****                                                                  00100376
CBB** ********************** BBCCOMNT **********************************00110376
C****                                                                   00120376
C****            1978 FORTRAN COMPILER VALIDATION SYSTEM                00130376
C****                          VERSION 2.1                              00140376
C****                                                                   00150376
C****                                                                   00160376
C****           SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO         00170376
C****          NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY           00180376
C****               SOFTWARE STANDARDS VALIDATION GROUP                 00190376
C****                      BUILDING 225  RM A266                        00200376
C****                     GAITHERSBURG, MD  20899                       00210376
C****                                                                   00220376
C****                                                                   00230376
C****                                                                   00240376
CBE** ********************** BBCCOMNT **********************************00250376
CBB** ********************** BBCINITA **********************************00260376
C**** SPECIFICATION STATEMENTS                                          00270376
C****                                                                   00280376
      CHARACTER ZVERS*13, ZVERSD*17, ZDATE*17, ZPROG*5, ZCOMPL*20,      00290376
     1          ZNAME*20, ZTAPE*10, ZPROJ*13, REMRKS*31, ZTAPED*13      00300376
CBE** ********************** BBCINITA **********************************00310376
CBB** ********************** BBCINITB **********************************00320376
C**** INITIALIZE SECTION                                                00330376
      DATA  ZVERS,                  ZVERSD,             ZDATE           00340376
     1      /'VERSION 2.1  ',  '93/10/21*21.02.00',  '*NO DATE*TIME'/   00350376
      DATA       ZCOMPL,             ZNAME,             ZTAPE           00360376
     1      /'*NONE SPECIFIED*', '*NO COMPANY NAME*', '*NO TAPE*'/      00370376
      DATA       ZPROJ,           ZTAPED,         ZPROG                 00380376
     1      /'*NO PROJECT*',   '*NO TAPE DATE',  'XXXXX'/               00390376
      DATA   REMRKS /'                               '/                 00400376
C**** THE FOLLOWING 9 COMMENT LINES (CZ01, CZ02, ...) CAN BE REPLACED   00410376
C**** FOR IDENTIFYING THE TEST ENVIRONMENT                              00420376
C****                                                                   00430376
CZ01  ZVERS  = 'VERSION OF THE COMPILER VALIDATION SYSTEM'              00440376
CZ02  ZVERSD = 'CREATION DATE/TIME OF THE COMPILER VALIDATION SYSTEM'   00450376
CZ03  ZPROG  = 'PROGRAM NAME'                                           00460376
CZ04  ZDATE  = 'DATE OF TEST'                                           00470376
CZ05  ZCOMPL = 'COMPILER IDENTIFICATION'                                00480376
CZ06  ZPROJ  = 'PROJECT NUMBER/IDENTIFICATION'                          00490376
CZ07  ZNAME  = 'NAME OF USER'                                           00500376
CZ08  ZTAPE  = 'TAPE OWNER/ID'                                          00510376
CZ09  ZTAPED = 'DATE TAPE COPIED'                                       00520376
C                                                                       00530376
      IVPASS = 0                                                        00540376
      IVFAIL = 0                                                        00550376
      IVDELE = 0                                                        00560376
      IVINSP = 0                                                        00570376
      IVTOTL = 0                                                        00580376
      IVTOTN = 0                                                        00590376
      ICZERO = 0                                                        00600376
C                                                                       00610376
C     I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER.         00620376
      I01 = 05                                                          00630376
C     I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER.             00640376
      I02 = 06                                                          00650376
C                                                                       00660376
CX010   REPLACED BY FEXEC X-010 CONTROL CARD (CARD-READER UNIT NUMBER). 00670376
C     THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5      00680376
CX011   REPLACED BY FEXEC X-011 CONTROL CARD.  CX011 IS FOR SYSTEMS     00690376
C     REQUIRING ADDITIONAL STATEMENTS FOR FILES ASSOCIATED WITH CX010.  00700376
C                                                                       00710376
CX020   REPLACED BY FEXEC X-020 CONTROL CARD (PRINTER UNIT NUMBER).     00720376
C     THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02= 6       00730376
CX021   REPLACED BY FEXEC X-021 CONTROL CARD.  CX021 IS FOR SYSTEMS     00740376
C     REQUIRING ADDITIONAL STATEMENTS FOR FILES ASSOCIATED WITH CX020.  00750376
C                                                                       00760376
CBE** ********************** BBCINITB **********************************00770376
      NUVI = I02                                                        00780376
      IVTOTL = 13                                                       00790376
      ZPROG = 'FM376'                                                   00800376
CBB** ********************** BBCHED0A **********************************00810376
C****                                                                   00820376
C**** WRITE REPORT TITLE                                                00830376
C****                                                                   00840376
      WRITE (I02, 90002)                                                00850376
      WRITE (I02, 90006)                                                00860376
      WRITE (I02, 90007)                                                00870376
      WRITE (I02, 90008)  ZVERS, ZVERSD                                 00880376
      WRITE (I02, 90009)  ZPROG, ZPROG                                  00890376
      WRITE (I02, 90010)  ZDATE, ZCOMPL                                 00900376
CBE** ********************** BBCHED0A **********************************00910376
C*****                                                                  00920376
C*****    HEADER FOR SEGMENT 195                                        00930376
        WRITE(NUVI,19500)                                               00940376
19500   FORMAT(" ", / "  XATAN - (195) INTRINSIC FUNCTIONS" //          00950376
     1         "  ATAN, ATAN2   (ARCTANGENT)" //                        00960376
     2         "  SUBSET REF. - 15.3" )                                 00970376
CBB** ********************** BBCHED0B **********************************00980376
C**** WRITE DETAIL REPORT HEADERS                                       00990376
C****                                                                   01000376
      WRITE (I02,90004)                                                 01010376
      WRITE (I02,90004)                                                 01020376
      WRITE (I02,90013)                                                 01030376
      WRITE (I02,90014)                                                 01040376
      WRITE (I02,90015) IVTOTL                                          01050376
CBE** ********************** BBCHED0B **********************************01060376
C*****                                                                  01070376
        WRITE(NUVI,19501)                                               01080376
C*****                                                                  01090376
19501   FORMAT(/ 8X, "TEST OF ATAN" )                                   01100376
C*****                                                                  01110376
CT001*  TEST 1                    TEST LARGE VALUES TO TEST SINGULARITY 01120376
           IVTNUM = 1                                                   01130376
        BVS = 500.0                                                     01140376
        AVS = ATAN(BVS)                                                 01150376
           IF (AVS - 0.15687E+01) 20010, 10010, 40010                   01160376
40010      IF (AVS - 0.15689E+01) 10010, 10010, 20010                   01170376
10010      IVPASS = IVPASS + 1                                          01180376
           WRITE (NUVI, 80002) IVTNUM                                   01190376
           GO TO 0011                                                   01200376
20010      IVFAIL = IVFAIL + 1                                          01210376
           RVCORR = 1.56879632946156                                    01220376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      01230376
 0011      CONTINUE                                                     01240376
CT002*  TEST 2                    TEST LARGE VALUES TO TEST SINGULARITY 01250376
           IVTNUM = 2                                                   01260376
        AVS = ATAN(-1000.0)                                             01270376
           IF (AVS + 0.15699E+01) 20020, 10020, 40020                   01280376
40020      IF (AVS + 0.15697E+01) 10020, 10020, 20020                   01290376
10020      IVPASS = IVPASS + 1                                          01300376
           WRITE (NUVI, 80002) IVTNUM                                   01310376
           GO TO 0021                                                   01320376
20020      IVFAIL = IVFAIL + 1                                          01330376
           RVCORR = -1.56979632712823                                   01340376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      01350376
 0021      CONTINUE                                                     01360376
CT003*  TEST 3                          AN EXPRESSION PRESENTED TO ATAN 01370376
           IVTNUM = 3                                                   01380376
        AVS = ATAN(100.0 / 100.0)                                       01390376
           IF (AVS - 0.78535E+00) 20030, 10030, 40030                   01400376
40030      IF (AVS - 0.78544E+00) 10030, 10030, 20030                   01410376
10030      IVPASS = IVPASS + 1                                          01420376
           WRITE (NUVI, 80002) IVTNUM                                   01430376
           GO TO 0031                                                   01440376
20030      IVFAIL = IVFAIL + 1                                          01450376
           RVCORR = 0.78539816339745                                    01460376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      01470376
 0031      CONTINUE                                                     01480376
CT004*  TEST 4                             A VARIABLE PRESENTED TO ATAN 01490376
           IVTNUM = 4                                                   01500376
        BVS = -SQRT(3.0)                                                01510376
        AVS = ATAN(BVS)                                                 01520376
           IF (AVS + 0.10473E+01) 20040, 10040, 40040                   01530376
40040      IF (AVS + 0.10471E+01) 10040, 10040, 20040                   01540376
10040      IVPASS = IVPASS + 1                                          01550376
           WRITE (NUVI, 80002) IVTNUM                                   01560376
           GO TO 0041                                                   01570376
20040      IVFAIL = IVFAIL + 1                                          01580376
           RVCORR = -1.04719755119660                                   01590376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      01600376
 0041      CONTINUE                                                     01610376
CT005*  TEST 5                             AN ARGUMENT OF LOW MAGNITUDE 01620376
           IVTNUM = 5                                                   01630376
        AVS = ATAN(1.0E-16)                                             01640376
           IF (AVS - 0.99995E-16) 20050, 10050, 40050                   01650376
40050      IF (AVS - 0.10001E-15) 10050, 10050, 20050                   01660376
10050      IVPASS = IVPASS + 1                                          01670376
           WRITE (NUVI, 80002) IVTNUM                                   01680376
           GO TO 0051                                                   01690376
20050      IVFAIL = IVFAIL + 1                                          01700376
           RVCORR = 1.00000000000000E-16                                01710376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      01720376
 0051      CONTINUE                                                     01730376
CT006*  TEST 6                            AN ARGUMENT OF HIGH MAGNITUDE 01740376
           IVTNUM = 6                                                   01750376
        AVS = ATAN(-2.0E+34)                                            01760376
           IF (AVS + 0.15709E+01) 20060, 10060, 40060                   01770376
40060      IF (AVS + 0.15707E+01) 10060, 10060, 20060                   01780376
10060      IVPASS = IVPASS + 1                                          01790376
           WRITE (NUVI, 80002) IVTNUM                                   01800376
           GO TO 0061                                                   01810376
20060      IVFAIL = IVFAIL + 1                                          01820376
           RVCORR = -1.57079632679490                                   01830376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      01840376
 0061      CONTINUE                                                     01850376
C*****                                                                  01860376
        WRITE(NUVI,19508)                                               01870376
19508   FORMAT(/ 08X, "TEST OF ATAN2" )                                 01880376
CT007*  TEST 7                              TEST ATAN2 FOR (0,POSITIVE) 01890376
           IVTNUM = 7                                                   01900376
        BVS = 10.0 / 10.0                                               01910376
        CVS = 0.0                                                       01920376
        AVS = ATAN2(CVS, BVS)                                           01930376
           IF (AVS + 0.50000E-04) 20070, 10070, 40070                   01940376
40070      IF (AVS - 0.50000E-04) 10070, 10070, 20070                   01950376
10070      IVPASS = IVPASS + 1                                          01960376
           WRITE (NUVI, 80002) IVTNUM                                   01970376
           GO TO 0071                                                   01980376
20070      IVFAIL = IVFAIL + 1                                          01990376
           RVCORR = 0.00000000000000                                    02000376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      02010376
 0071      CONTINUE                                                     02020376
CT008*  TEST 8                             TEST ATAN2 FOR (0, NEGATIVE) 02030376
           IVTNUM = 8                                                   02040376
        BVS = 0.0                                                       02050376
        CVS = -25.0 / 2.0                                               02060376
        AVS = ATAN2(BVS, CVS)                                           02070376
           IF (AVS - 0.31414E+01) 20080, 10080, 40080                   02080376
40080      IF (AVS - 0.31418E+01) 10080, 10080, 20080                   02090376
10080      IVPASS = IVPASS + 1                                          02100376
           WRITE (NUVI, 80002) IVTNUM                                   02110376
           GO TO 0081                                                   02120376
20080      IVFAIL = IVFAIL + 1                                          02130376
           RVCORR = 3.14159265358979                                    02140376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      02150376
 0081      CONTINUE                                                     02160376
CT009*  TEST 9                         AN EXPRESSION PRESENTED TO ATAN2 02170376
           IVTNUM = 9                                                   02180376
        BVS = 1.0                                                       02190376
        CVS = BVS + BVS                                                 02200376
        AVS = ATAN2(BVS * 2.0, CVS)                                     02210376
           IF (AVS - 0.78535E+00) 20090, 10090, 40090                   02220376
40090      IF (AVS - 0.78544E+00) 10090, 10090, 20090                   02230376
10090      IVPASS = IVPASS + 1                                          02240376
           WRITE (NUVI, 80002) IVTNUM                                   02250376
           GO TO 0091                                                   02260376
20090      IVFAIL = IVFAIL + 1                                          02270376
           RVCORR = 0.78539816339745                                    02280376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      02290376
 0091      CONTINUE                                                     02300376
CT010*  TEST 10                         TEST ATAN2(X,Y) FOR X NEAR ZERO 02310376
           IVTNUM = 10                                                  02320376
        BVS = ASIN(0.6)                                                 02330376
        CVS = ACOS(0.8)                                                 02340376
        AVS = ATAN2(BVS, CVS)                                           02350376
           IF (AVS - 0.78535E+00) 20100, 10100, 40100                   02360376
40100      IF (AVS - 0.78544E+00) 10100, 10100, 20100                   02370376
10100      IVPASS = IVPASS + 1                                          02380376
           WRITE (NUVI, 80002) IVTNUM                                   02390376
           GO TO 0101                                                   02400376
20100      IVFAIL = IVFAIL + 1                                          02410376
           RVCORR = 0.78539816339745                                    02420376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      02430376
 0101      CONTINUE                                                     02440376
CT011*  TEST 11                          WHERE ATAN2(X,Y) IS ZERO FOR Y 02450376
           IVTNUM = 11                                                  02460376
        AVS = ATAN2(1.2, 0.0)                                           02470376
           IF (AVS - 0.15707E+01) 20110, 10110, 40110                   02480376
40110      IF (AVS - 0.15709E+01) 10110, 10110, 20110                   02490376
10110      IVPASS = IVPASS + 1                                          02500376
           WRITE (NUVI, 80002) IVTNUM                                   02510376
           GO TO 0111                                                   02520376
20110      IVFAIL = IVFAIL + 1                                          02530376
           RVCORR = 1.57079632679490                                    02540376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      02550376
 0111      CONTINUE                                                     02560376
CT012*  TEST 12                          WHERE ATAN2(X,Y) IS ZERO FOR Y 02570376
           IVTNUM = 12                                                  02580376
        BVS = -2.5                                                      02590376
        CVS = 0.0                                                       02600376
        AVS = ATAN2(BVS, CVS)                                           02610376
           IF (AVS + 0.15709E+01) 20120, 10120, 40120                   02620376
40120      IF (AVS + 0.15707E+01) 10120, 10120, 20120                   02630376
10120      IVPASS = IVPASS + 1                                          02640376
           WRITE (NUVI, 80002) IVTNUM                                   02650376
           GO TO 0121                                                   02660376
20120      IVFAIL = IVFAIL + 1                                          02670376
           RVCORR = -1.57079632679490                                   02680376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      02690376
 0121      CONTINUE                                                     02700376
CT013*  TEST 13                           COMPARISON OF ATAN WITH ATAN2 02710376
           IVTNUM = 13                                                  02720376
        AVS = (ATAN(SQRT(3.0) / 3.0) * 2.0)                             02730376
     1             + ATAN2(-SQRT(3.0) / 2.0, 1.0 / 2.0)                 02740376
           IF (AVS + 0.50000E-04) 20130, 10130, 40130                   02750376
40130      IF (AVS - 0.50000E-04) 10130, 10130, 20130                   02760376
10130      IVPASS = IVPASS + 1                                          02770376
           WRITE (NUVI, 80002) IVTNUM                                   02780376
           GO TO 0131                                                   02790376
20130      IVFAIL = IVFAIL + 1                                          02800376
           RVCORR = 0.00000000000000                                    02810376
           WRITE (NUVI, 80012) IVTNUM, AVS, RVCORR                      02820376
 0131      CONTINUE                                                     02830376
C*****                                                                  02840376
CBB** ********************** BBCSUM0  **********************************02850376
C**** WRITE OUT TEST SUMMARY                                            02860376
C****                                                                   02870376
      IVTOTN = IVPASS + IVFAIL + IVDELE + IVINSP                        02880376
      WRITE (I02, 90004)                                                02890376
      WRITE (I02, 90014)                                                02900376
      WRITE (I02, 90004)                                                02910376
      WRITE (I02, 90020) IVPASS                                         02920376
      WRITE (I02, 90022) IVFAIL                                         02930376
      WRITE (I02, 90024) IVDELE                                         02940376
      WRITE (I02, 90026) IVINSP                                         02950376
      WRITE (I02, 90028) IVTOTN, IVTOTL                                 02960376
CBE** ********************** BBCSUM0  **********************************02970376
CBB** ********************** BBCFOOT0 **********************************02980376
C**** WRITE OUT REPORT FOOTINGS                                         02990376
C****                                                                   03000376
      WRITE (I02,90016) ZPROG, ZPROG                                    03010376
      WRITE (I02,90018) ZPROJ, ZNAME, ZTAPE, ZTAPED                     03020376
      WRITE (I02,90019)                                                 03030376
CBE** ********************** BBCFOOT0 **********************************03040376
CBB** ********************** BBCFMT0A **********************************03050376
C**** FORMATS FOR TEST DETAIL LINES                                     03060376
C****                                                                   03070376
80000 FORMAT (" ",2X,I3,4X,"DELETED",32X,A31)                           03080376
80002 FORMAT (" ",2X,I3,4X," PASS  ",32X,A31)                           03090376
80004 FORMAT (" ",2X,I3,4X,"INSPECT",32X,A31)                           03100376
80008 FORMAT (" ",2X,I3,4X," FAIL  ",32X,A31)                           03110376
80010 FORMAT (" ",2X,I3,4X," FAIL  ",/," ",15X,"COMPUTED= " ,           03120376
     1I6,/," ",15X,"CORRECT=  " ,I6)                                    03130376
80012 FORMAT (" ",2X,I3,4X," FAIL  ",/," ",16X,"COMPUTED= " ,           03140376
     1E12.5,/," ",16X,"CORRECT=  " ,E12.5)                              03150376
80018 FORMAT (" ",2X,I3,4X," FAIL  ",/," ",16X,"COMPUTED= " ,           03160376
     1A21,/," ",16X,"CORRECT=  " ,A21)                                  03170376
80020 FORMAT (" ",16X,"COMPUTED= " ,A21,1X,A31)                         03180376
80022 FORMAT (" ",16X,"CORRECT=  " ,A21,1X,A31)                         03190376
80024 FORMAT (" ",16X,"COMPUTED= " ,I6,16X,A31)                         03200376
80026 FORMAT (" ",16X,"CORRECT=  " ,I6,16X,A31)                         03210376
80028 FORMAT (" ",16X,"COMPUTED= " ,E12.5,10X,A31)                      03220376
80030 FORMAT (" ",16X,"CORRECT=  " ,E12.5,10X,A31)                      03230376
80050 FORMAT (" ",48X,A31)                                              03240376
CBE** ********************** BBCFMT0A **********************************03250376
CBB** ********************** BBCFMT0B **********************************03260376
C**** FORMAT STATEMENTS FOR PAGE HEADERS                                03270376
C****                                                                   03280376
90002 FORMAT ("1")                                                      03290376
90004 FORMAT (" ")                                                      03300376
90006 FORMAT (" ",20X,"NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY" )03310376
90007 FORMAT (" ",19X,"FORTRAN COMPILER VALIDATION SYSTEM" )            03320376
90008 FORMAT (" ",21X,A13,A17)                                          03330376
90009 FORMAT (" ",/," *",A5,"BEGIN*",12X,"TEST RESULTS - " ,A5,/)       03340376
90010 FORMAT (" ",8X,"TEST DATE*TIME= " ,A17,"  -  COMPILER= " ,A20)    03350376
90013 FORMAT (" "," TEST   ","PASS/FAIL " ,6X,"DISPLAYED RESULTS" ,     03360376
     1       7X,"REMARKS",24X)                                          03370376
90014 FORMAT (" ","----------------------------------------------" ,    03380376
     1        "---------------------------------" )                     03390376
90015 FORMAT (" ",48X,"THIS PROGRAM HAS " ,I3," TESTS",/)               03400376
C****                                                                   03410376
C**** FORMAT STATEMENTS FOR REPORT FOOTINGS                             03420376
C****                                                                   03430376
90016 FORMAT (" ",/," *",A5,"END*",14X,"END OF TEST - " ,A5,/)          03440376
90018 FORMAT (" ",A13,13X,A20,"   *   ",A10,"/",                        03450376
     1        A13)                                                      03460376
90019 FORMAT (" ","FOR OFFICIAL USE ONLY     " ,35X,"COPYRIGHT  1982" ) 03470376
C****                                                                   03480376
C**** FORMAT STATEMENTS FOR RUN SUMMARY                                 03490376
C****                                                                   03500376
90020 FORMAT (" ",21X,I5," TESTS PASSED" )                              03510376
90022 FORMAT (" ",21X,I5," TESTS FAILED" )                              03520376
90024 FORMAT (" ",21X,I5," TESTS DELETED" )                             03530376
90026 FORMAT (" ",21X,I5," TESTS REQUIRE INSPECTION" )                  03540376
90028 FORMAT (" ",21X,I5," OF ",I3," TESTS EXECUTED" )                  03550376
CBE** ********************** BBCFMT0B **********************************03560376
C*****                                                                  03570376
C*****    END OF TEST SEGMENT 195                                       03580376
      STOP                                                              03590376
      END                                                               03600376
                                                                        03610376