[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.4 and 1.5

version 1.4, 2005/02/08 17:20:56 version 1.5, 2007/01/30 00:28:26
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/builtin/round.c,v 1.3 2003/12/02 07:00:12 noro Exp $ */  
   
 #undef INTERVAL  
 #define INTERVAL  
 #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[] = {
         {"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},          {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.4  
changed lines
  Added in v.1.5

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