version 1.4, 2005/02/08 17:20:56 |
version 1.7, 2018/03/29 01:32:50 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/builtin/round.c,v 1.3 2003/12/02 07:00:12 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/builtin/round.c,v 1.6 2007/01/30 00:38:25 noro Exp $ */ |
|
|
#undef INTERVAL |
#undef INTERVAL |
#define INTERVAL |
#define INTERVAL |
Line 12 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 if ( NID(a) != N_R || NID(b) != N_R ) |
else if ( NID(a) != N_R || NID(b) != N_R ) |
error("add_pinf : invalid argument"); |
error("add_pinf : invalid argument"); |
else { |
else { |
FPPLUSINF |
FPPLUSINF |
c = BDY(a)+BDY(b); |
c = BDY(a)+BDY(b); |
FPNEAREST |
FPNEAREST |
MKReal(c,r); |
MKReal(c,r); |
*rp = 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 if ( NID(a) != N_R || NID(b) != N_R ) |
else if ( NID(a) != N_R || NID(b) != N_R ) |
error("add_pinf : invalid argument"); |
error("add_pinf : invalid argument"); |
else { |
else { |
FPMINUSINF |
FPMINUSINF |
c = BDY(a)+BDY(b); |
c = BDY(a)+BDY(b); |
FPNEAREST |
FPNEAREST |
MKReal(c,r); |
MKReal(c,r); |
*rp = 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 if ( NID(a) != N_R || NID(b) != N_R ) |
else if ( NID(a) != N_R || NID(b) != N_R ) |
error("sub_pinf : invalid argument"); |
error("sub_pinf : invalid argument"); |
else { |
else { |
FPPLUSINF |
FPPLUSINF |
c = BDY(a)-BDY(b); |
c = BDY(a)-BDY(b); |
FPNEAREST |
FPNEAREST |
MKReal(c,r); |
MKReal(c,r); |
*rp = 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 if ( NID(a) != N_R || NID(b) != N_R ) |
else if ( NID(a) != N_R || NID(b) != N_R ) |
error("sub_minf : invalid argument"); |
error("sub_minf : invalid argument"); |
else { |
else { |
FPMINUSINF |
FPMINUSINF |
c = BDY(a)-BDY(b); |
c = BDY(a)-BDY(b); |
FPNEAREST |
FPNEAREST |
MKReal(c,r); |
MKReal(c,r); |
*rp = 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 if ( NID(a) != N_R || NID(b) != N_R ) |
else if ( NID(a) != N_R || NID(b) != N_R ) |
error("mul_pinf : invalid argument"); |
error("mul_pinf : invalid argument"); |
else { |
else { |
FPPLUSINF |
FPPLUSINF |
c = BDY(a)*BDY(b); |
c = BDY(a)*BDY(b); |
FPNEAREST |
FPNEAREST |
MKReal(c,r); |
MKReal(c,r); |
*rp = 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 if ( NID(a) != N_R || NID(b) != N_R ) |
else if ( NID(a) != N_R || NID(b) != N_R ) |
error("mul_minf : invalid argument"); |
error("mul_minf : invalid argument"); |
else { |
else { |
FPMINUSINF |
FPMINUSINF |
c = BDY(a)*BDY(b); |
c = BDY(a)*BDY(b); |
FPNEAREST |
FPNEAREST |
MKReal(c,r); |
MKReal(c,r); |
*rp = 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 if ( NID(a) != N_R || NID(b) != N_R ) |
else if ( NID(a) != N_R || NID(b) != N_R ) |
error("div_pinf : invalid argument"); |
error("div_pinf : invalid argument"); |
else { |
else { |
FPPLUSINF |
FPPLUSINF |
c = BDY(a)/BDY(b); |
c = BDY(a)/BDY(b); |
FPNEAREST |
FPNEAREST |
MKReal(c,r); |
MKReal(c,r); |
*rp = 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_minf : division by 0"); |
error("div_minf : division by 0"); |
else if ( !a ) |
else if ( !a ) |
*rp = 0; |
*rp = 0; |
else if ( NID(a) != N_R || NID(b) != N_R ) |
else if ( NID(a) != N_R || NID(b) != N_R ) |
error("div_minf : invalid argument"); |
error("div_minf : invalid argument"); |
else { |
else { |
FPMINUSINF |
FPMINUSINF |
c = BDY(a)/BDY(b); |
c = BDY(a)/BDY(b); |
FPNEAREST |
FPNEAREST |
MKReal(c,r); |
MKReal(c,r); |
*rp = r; |
*rp = r; |
} |
} |
} |
} |