File:  [local] / rpl / src / arithmetique.f
Revision 1.22: download - view: text, annotated - select for diffs - revision graph
Tue Jun 21 15:26:27 2011 UTC (12 years, 10 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Correction d'une réinitialisation sauvage de la pile des variables par niveau
dans la copie de la structure de description du processus. Cela corrige
la fonction SPAWN qui échouait sur un segmentation fault car la pile des
variables par niveau était vide alors même que l'arbre des variables contenait
bien les variables. Passage à la prerelease 2.

    1: C===============================================================================
    2: C RPL/2 (R) version 4.1.0.prerelease.2
    3: C Copyright (C) 1989-2011 Dr. BERTRAND Joël
    4: C
    5: C This file is part of RPL/2.
    6: C
    7: C RPL/2 is free software; you can redistribute it and/or modify it
    8: C under the terms of the CeCILL V2 License as published by the french
    9: C CEA, CNRS and INRIA.
   10: C
   11: C RPL/2 is distributed in the hope that it will be useful, but WITHOUT
   12: C ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13: C FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
   14: C for more details.
   15: C
   16: C You should have received a copy of the CeCILL License
   17: C along with RPL/2. If not, write to info@cecill.info.
   18: C===============================================================================
   19: 
   20: 
   21: C-- Addition -------------------------------------------------------------------
   22: 
   23:       subroutine F77ADDITIONCI(CA, IB, RESULTAT)
   24: 
   25:       implicit none
   26: 
   27:       complex*16        CA
   28:       complex*16        CB
   29:       complex*16        RESULTAT
   30: 
   31:       integer*8         IB
   32: 
   33:       CB = dcmplx(IB)
   34:       RESULTAT = CA + CB
   35: 
   36:       return
   37:       end
   38: 
   39: 
   40:       subroutine F77ADDITIONCC(CA, CB, RESULTAT)
   41: 
   42:       implicit none
   43: 
   44:       complex*16        CA
   45:       complex*16        CB
   46:       complex*16        RESULTAT
   47: 
   48:       RESULTAT = CA + CB
   49: 
   50:       return
   51:       end
   52: 
   53: 
   54:       subroutine F77ADDITIONCR(CA, RB, RESULTAT)
   55: 
   56:       implicit none
   57: 
   58:       complex*16        CA
   59:       complex*16        CB
   60:       complex*16        RESULTAT
   61: 
   62:       real*8            RB
   63: 
   64:       CB = dcmplx(RB)
   65:       RESULTAT = CA + CB
   66: 
   67:       return
   68:       end
   69: 
   70: C-- Multiplication -------------------------------------------------------------
   71: 
   72:       subroutine F77MULTIPLICATIONCI(CA, IB, RESULTAT)
   73: 
   74:       implicit none
   75: 
   76:       complex*16        CA
   77:       complex*16        CB
   78:       complex*16        RESULTAT
   79: 
   80:       integer*8         IB
   81: 
   82:       CB = dcmplx(IB)
   83:       RESULTAT = CA * CB
   84: 
   85:       return
   86:       end
   87: 
   88: 
   89:       subroutine F77MULTIPLICATIONCC(CA, CB, RESULTAT)
   90: 
   91:       implicit none
   92: 
   93:       complex*16        CA
   94:       complex*16        CB
   95:       complex*16        RESULTAT
   96: 
   97:       RESULTAT = CA * CB
   98: 
   99:       return
  100:       end
  101: 
  102: 
  103:       subroutine F77MULTIPLICATIONCR(CA, RB, RESULTAT)
  104: 
  105:       implicit none
  106: 
  107:       complex*16        CA
  108:       complex*16        CB
  109:       complex*16        RESULTAT
  110: 
  111:       real*8            RB
  112: 
  113:       CB = dcmplx(RB)
  114:       RESULTAT = CA * CB
  115: 
  116:       return
  117:       end
  118: 
  119: C-- Soustraction ---------------------------------------------------------------
  120: 
  121:       subroutine F77SOUSTRACTIONCI(CA, IB, RESULTAT)
  122: 
  123:       implicit none
  124: 
  125:       complex*16        CA
  126:       complex*16        CB
  127:       complex*16        RESULTAT
  128: 
  129:       integer*8         IB
  130: 
  131:       CB = dcmplx(IB)
  132:       RESULTAT = CA - CB
  133: 
  134:       return
  135:       end
  136: 
  137: 
  138:       subroutine F77SOUSTRACTIONIC(IA, CB, RESULTAT)
  139: 
  140:       implicit none
  141: 
  142:       complex*16        CA
  143:       complex*16        CB
  144:       complex*16        RESULTAT
  145: 
  146:       integer*8         IA
  147: 
  148:       CA = dcmplx(IA)
  149:       RESULTAT = CA - CB
  150: 
  151:       return
  152:       end
  153: 
  154: 
  155:       subroutine F77SOUSTRACTIONCC(CA, CB, RESULTAT)
  156: 
  157:       implicit none
  158: 
  159:       complex*16        CA
  160:       complex*16        CB
  161:       complex*16        RESULTAT
  162: 
  163:       RESULTAT = CA - CB
  164: 
  165:       return
  166:       end
  167: 
  168: 
  169:       subroutine F77SOUSTRACTIONCR(CA, RB, RESULTAT)
  170: 
  171:       implicit none
  172: 
  173:       complex*16        CA
  174:       complex*16        CB
  175:       complex*16        RESULTAT
  176: 
  177:       real*8            RB
  178: 
  179:       CB = dcmplx(RB)
  180:       RESULTAT = CA - CB
  181: 
  182:       return
  183:       end
  184: 
  185: 
  186:       subroutine F77SOUSTRACTIONRC(RA, CB, RESULTAT)
  187: 
  188:       implicit none
  189: 
  190:       complex*16        CA
  191:       complex*16        CB
  192:       complex*16        RESULTAT
  193: 
  194:       real*8            RA
  195: 
  196:       CA = dcmplx(RA)
  197:       RESULTAT = CA - CB
  198: 
  199:       return
  200:       end
  201: 
  202: C-- Division -------------------------------------------------------------------
  203: 
  204:       subroutine F77DIVISIONCI(CA, IB, RESULTAT)
  205: 
  206:       implicit none
  207: 
  208:       complex*16        CA
  209:       complex*16        CB
  210:       complex*16        RESULTAT
  211: 
  212:       integer*8         IB
  213: 
  214:       CB = dcmplx(IB)
  215:       RESULTAT = CA / CB
  216: 
  217:       return
  218:       end
  219: 
  220: 
  221:       subroutine F77DIVISIONIC(IA, CB, RESULTAT)
  222: 
  223:       implicit none
  224: 
  225:       complex*16        CA
  226:       complex*16        CB
  227:       complex*16        RESULTAT
  228: 
  229:       integer*8         IA
  230: 
  231:       CA = dcmplx(IA)
  232:       RESULTAT = CA / CB
  233: 
  234:       return
  235:       end
  236: 
  237: 
  238:       subroutine F77DIVISIONCC(CA, CB, RESULTAT)
  239: 
  240:       implicit none
  241: 
  242:       complex*16        CA
  243:       complex*16        CB
  244:       complex*16        RESULTAT
  245: 
  246:       RESULTAT = CA / CB
  247: 
  248:       return
  249:       end
  250: 
  251: 
  252:       subroutine F77DIVISIONCR(CA, RB, RESULTAT)
  253: 
  254:       implicit none
  255: 
  256:       complex*16        CA
  257:       complex*16        CB
  258:       complex*16        RESULTAT
  259: 
  260:       real*8            RB
  261: 
  262:       CB = dcmplx(RB)
  263:       RESULTAT = CA / CB
  264: 
  265:       return
  266:       end
  267: 
  268: 
  269:       subroutine F77DIVISIONRC(RA, CB, RESULTAT)
  270: 
  271:       implicit none
  272: 
  273:       complex*16        CA
  274:       complex*16        CB
  275:       complex*16        RESULTAT
  276: 
  277:       real*8            RA
  278: 
  279:       CA = dcmplx(RA)
  280:       RESULTAT = CA / CB
  281: 
  282:       return
  283:       end
  284: 
  285: C-- Puissance ------------------------------------------------------------------
  286: 
  287:       subroutine F77PUISSANCEII(IA, IB, RESULTAT)
  288: 
  289:       implicit none
  290: 
  291:       integer*8         IA
  292:       integer*8         IB
  293:       integer*8         RESULTAT
  294: 
  295:       RESULTAT = IA ** IB
  296: 
  297:       return
  298:       end
  299: 
  300: 
  301:       subroutine F77PUISSANCEIR(IA, RB, RESULTAT)
  302: 
  303:       implicit none
  304: 
  305:       integer*8         IA
  306: 
  307:       real*8            RB
  308:       real*8            RESULTAT
  309: 
  310:       RESULTAT = IA ** RB
  311: 
  312:       return
  313:       end
  314: 
  315: 
  316:       subroutine F77PUISSANCEIC(IA, CB, RESULTAT)
  317: 
  318:       implicit none
  319: 
  320:       complex*16        CB
  321:       complex*16        RESULTAT
  322: 
  323:       integer*8         IA
  324: 
  325:       RESULTAT = IA ** CB
  326: 
  327:       return
  328:       end
  329: 
  330: 
  331:       subroutine F77PUISSANCERI(RA, IB, RESULTAT, TRONCATURE)
  332: 
  333:       implicit none
  334: 
  335:       integer*4         INTEGER4
  336:       integer*4         TRONCATURE
  337: 
  338:       integer*8         IB
  339: 
  340:       real*8            RA
  341:       real*8            RESULTAT
  342: 
  343: C-- IB converti en integer*4
  344:       INTEGER4 = IB
  345: 
  346:       if (IB.ne.INTEGER4) then
  347:           TRONCATURE = -1
  348:       else
  349:           TRONCATURE = 0
  350:       end if
  351: 
  352:       RESULTAT = RA ** INTEGER4
  353: 
  354:       return
  355:       end
  356: 
  357: 
  358:       subroutine F77PUISSANCERR(RA, RB, RESULTAT)
  359: 
  360:       implicit none
  361: 
  362:       real*8            RA
  363:       real*8            RB
  364:       real*8            RESULTAT
  365: 
  366:       RESULTAT = RA ** RB
  367: 
  368:       return
  369:       end
  370: 
  371: 
  372:       subroutine F77PUISSANCERC(RA, CB, RESULTAT)
  373: 
  374:       implicit none
  375: 
  376:       complex*16        CB
  377:       complex*16        RESULTAT
  378: 
  379:       real*8            RA
  380: 
  381:       RESULTAT = RA ** CB
  382: 
  383:       return
  384:       end
  385: 
  386: 
  387:       subroutine F77PUISSANCECI(CA, IB, RESULTAT, TRONCATURE)
  388: 
  389:       implicit none
  390: 
  391:       complex*16        CA
  392:       complex*16        RESULTAT
  393: 
  394:       integer*4         INTEGER4
  395:       integer*4         TRONCATURE
  396: 
  397:       integer*8         IB
  398: 
  399: C-- IB converti en integer*4
  400:       INTEGER4 = IB
  401: 
  402:       if (IB.ne.INTEGER4) then
  403:           TRONCATURE = -1
  404:       else
  405:           TRONCATURE = 0
  406:       end if
  407: 
  408:       RESULTAT = CA ** INTEGER4
  409: 
  410:       return
  411:       end
  412: 
  413: 
  414:       subroutine F77PUISSANCECR(CA, RB, RESULTAT)
  415: 
  416:       implicit none
  417: 
  418:       complex*16        CA
  419:       complex*16        RESULTAT
  420: 
  421:       real*8            RB
  422: 
  423:       RESULTAT = CA ** RB
  424: 
  425:       return
  426:       end
  427: 
  428: 
  429:       subroutine F77PUISSANCECC(CA, CB, RESULTAT)
  430: 
  431:       implicit none
  432: 
  433:       complex*16        CA
  434:       complex*16        CB
  435:       complex*16        RESULTAT
  436: 
  437:       RESULTAT = CA ** CB
  438: 
  439:       return
  440:       end
  441: 
  442: C-- Racine carrée --------------------------------------------------------------
  443: 
  444:       subroutine F77RACINECARREEIP(IA, RESULTAT)
  445: 
  446:       implicit none
  447: 
  448:       integer*8         IA
  449: 
  450:       real*8            RA
  451:       real*8            RESULTAT
  452: 
  453:       RA = dble(IA)
  454:       RESULTAT = sqrt(RA)
  455: 
  456:       return
  457:       end
  458: 
  459: 
  460:       subroutine F77RACINECARREEIN(IA, RESULTAT)
  461: 
  462:       implicit none
  463: 
  464:       complex*16        CA
  465:       complex*16        RESULTAT
  466: 
  467:       integer*8         IA
  468: 
  469:       CA = dcmplx(IA)
  470:       RESULTAT = sqrt(CA)
  471: 
  472:       return
  473:       end
  474: 
  475: 
  476:       subroutine F77RACINECARREERP(RA, RESULTAT)
  477: 
  478:       implicit none
  479: 
  480:       real*8            RA
  481:       real*8            RESULTAT
  482: 
  483:       RESULTAT = sqrt(RA)
  484: 
  485:       return
  486:       end
  487: 
  488: 
  489:       subroutine F77RACINECARREERN(RA, RESULTAT)
  490: 
  491:       implicit none
  492: 
  493:       complex*16        CA
  494:       complex*16        RESULTAT
  495: 
  496:       real*8            RA
  497: 
  498:       CA = dcmplx(RA)
  499:       RESULTAT = sqrt(CA)
  500: 
  501:       return
  502:       end
  503: 
  504: 
  505:       subroutine F77RACINECARREEC(CA, RESULTAT)
  506: 
  507:       implicit none
  508: 
  509:       complex*16        CA
  510:       complex*16        RESULTAT
  511: 
  512:       RESULTAT = sqrt(CA)
  513: 
  514:       return
  515:       end
  516: 
  517: C-- Valeur absolue -------------------------------------------------------------
  518: 
  519:       subroutine F77ABSC(C, RESULTAT)
  520: 
  521:       implicit none
  522: 
  523:       complex*16        C
  524: 
  525:       real*8            RESULTAT
  526: 
  527:       RESULTAT = ABS(C)
  528: 
  529:       return
  530:       end

CVSweb interface <joel.bertrand@systella.fr>