[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.2 and 1.8

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

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

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