[BACK]Return to round.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/round.c between version 1.5 and 1.8

version 1.5, 2007/01/30 00:28:26 version 1.8, 2019/11/12 10:52:04
Line 1 
Line 1 
   /* $OpenXM: OpenXM_contrib2/asir2000/builtin/round.c,v 1.7 2018/03/29 01:32:50 noro Exp $ */
   
   #undef INTERVAL
   #define INTERVAL        1
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
   #include "interval.h"
   
   void Padd_pinf(),Padd_minf();
   void Psub_pinf(),Psub_minf();
   void Pmul_pinf(),Pmul_minf();
   void Pdiv_pinf(),Pdiv_minf();
   
 struct ftab round_tab[] = {  struct ftab round_tab[] = {
         {0,0,0},    {"add_pinf",Padd_pinf,2},
     {"add_minf",Padd_minf,2},
     {"sub_pinf",Psub_pinf,2},
     {"sub_minf",Psub_minf,2},
     {"mul_pinf",Pmul_pinf,2},
     {"mul_minf",Pmul_minf,2},
     {"div_pinf",Pdiv_pinf,2},
     {"div_minf",Pdiv_minf,2},
     {0,0,0},
 };  };
   
   void Padd_pinf(NODE arg,Real *rp)
   {
     Real a,b,r;
     double c;
   
     a = (Real)ARG0(arg);
     b = (Real)ARG1(arg);
     if ( !a )
       *rp = b;
     else if ( !b )
       *rp = a;
     else if ( NID(a) != N_R || NID(b) != N_R )
       error("add_pinf : invalid argument");
     else {
       FPPLUSINF
       c = BDY(a)+BDY(b);
       FPNEAREST
       MKReal(c,r);
       *rp = r;
     }
   }
   
   void Padd_minf(NODE arg,Real *rp)
   {
     Real a,b,r;
     double c;
   
     a = (Real)ARG0(arg);
     b = (Real)ARG1(arg);
     if ( !a )
       *rp = b;
     else if ( !b )
       *rp = a;
     else if ( NID(a) != N_R || NID(b) != N_R )
       error("add_pinf : invalid argument");
     else {
       FPMINUSINF
       c = BDY(a)+BDY(b);
       FPNEAREST
       MKReal(c,r);
       *rp = r;
     }
   }
   
   void Psub_pinf(NODE arg,Real *rp)
   {
     Real a,b,r;
     double c;
   
     a = (Real)ARG0(arg);
     b = (Real)ARG1(arg);
     if ( !a ) {
       if ( !b )
         *rp = 0;
       else {
         c = -BDY(b);
         MKReal(c,r);
         *rp = r;
       }
     } else if ( !b )
       *rp = a;
     else if ( NID(a) != N_R || NID(b) != N_R )
       error("sub_pinf : invalid argument");
     else {
       FPPLUSINF
       c = BDY(a)-BDY(b);
       FPNEAREST
       MKReal(c,r);
       *rp = r;
     }
   }
   
   void Psub_minf(NODE arg,Real *rp)
   {
     Real a,b,r;
     double c;
   
     a = (Real)ARG0(arg);
     b = (Real)ARG1(arg);
     if ( !a ) {
       if ( !b )
         *rp = 0;
       else {
         c = -BDY(b);
         MKReal(c,r);
         *rp = r;
       }
     } else if ( !b )
       *rp = a;
     else if ( NID(a) != N_R || NID(b) != N_R )
       error("sub_minf : invalid argument");
     else {
       FPMINUSINF
       c = BDY(a)-BDY(b);
       FPNEAREST
       MKReal(c,r);
       *rp = r;
     }
   }
   
   void Pmul_pinf(NODE arg,Real *rp)
   {
     Real a,b,r;
     double c;
   
     a = (Real)ARG0(arg);
     b = (Real)ARG1(arg);
     if ( !a || !b )
       *rp = 0;
     else if ( NID(a) != N_R || NID(b) != N_R )
       error("mul_pinf : invalid argument");
     else {
       FPPLUSINF
       c = BDY(a)*BDY(b);
       FPNEAREST
       MKReal(c,r);
       *rp = r;
     }
   }
   
   void Pmul_minf(NODE arg,Real *rp)
   {
     Real a,b,r;
     double c;
   
     a = (Real)ARG0(arg);
     b = (Real)ARG1(arg);
     if ( !a || !b )
       *rp = 0;
     else if ( NID(a) != N_R || NID(b) != N_R )
       error("mul_minf : invalid argument");
     else {
       FPMINUSINF
       c = BDY(a)*BDY(b);
       FPNEAREST
       MKReal(c,r);
       *rp = r;
     }
   }
   
   void Pdiv_pinf(NODE arg,Real *rp)
   {
     Real a,b,r;
     double c;
   
     a = (Real)ARG0(arg);
     b = (Real)ARG1(arg);
     if ( !b )
       error("div_pinf : division by 0");
     else if ( !a )
       *rp = 0;
     else if ( NID(a) != N_R || NID(b) != N_R )
       error("div_pinf : invalid argument");
     else {
       FPPLUSINF
       c = BDY(a)/BDY(b);
       FPNEAREST
       MKReal(c,r);
       *rp = r;
     }
   }
   
   void Pdiv_minf(NODE arg,Real *rp)
   {
     Real a,b,r;
     double c;
   
     a = (Real)ARG0(arg);
     b = (Real)ARG1(arg);
     if ( !b )
       error("div_minf : division by 0");
     else if ( !a )
       *rp = 0;
     else if ( NID(a) != N_R || NID(b) != N_R )
       error("div_minf : invalid argument");
     else {
       FPMINUSINF
       c = BDY(a)/BDY(b);
       FPNEAREST
       MKReal(c,r);
       *rp = r;
     }
   }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.8

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>