version 1.11, 2015/08/06 23:41:52 |
version 1.12, 2015/08/20 08:42:07 |
|
|
/* |
/* |
* $OpenXM: OpenXM_contrib2/asir2000/engine/bf.c,v 1.10 2015/08/06 09:12:29 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/bf.c,v 1.11 2015/08/06 23:41:52 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
Line 32 Num tobf(Num a,int prec) |
|
Line 32 Num tobf(Num a,int prec) |
|
mpq_t q; |
mpq_t q; |
BF d; |
BF d; |
N nm,dn; |
N nm,dn; |
|
C c; |
|
Num re,im; |
int sgn; |
int sgn; |
|
|
if ( !a ) { |
if ( !a ) { |
Line 67 Num tobf(Num a,int prec) |
|
Line 69 Num tobf(Num a,int prec) |
|
MPFRTOBF(r,d); |
MPFRTOBF(r,d); |
return (Num)d; |
return (Num)d; |
break; |
break; |
|
case N_C: |
|
re = tobf(((C)a)->r,prec); im = tobf(((C)a)->i,prec); |
|
NEWC(c); c->r = re; c->i = im; |
|
return (Num)c; |
|
break; |
default: |
default: |
error("tobf : invalid argument"); |
error("tobf : invalid argument"); |
break; |
break; |
Line 132 void addbf(Num a,Num b,Num *c) |
|
Line 139 void addbf(Num a,Num b,Num *c) |
|
MPFRTOBF(r,d); |
MPFRTOBF(r,d); |
*c = (Num)d; |
*c = (Num)d; |
} |
} |
|
if ( !cmpbf(*c,0) ) *c = 0; |
} |
} |
|
|
void subbf(Num a,Num b,Num *c) |
void subbf(Num a,Num b,Num *c) |
Line 193 void subbf(Num a,Num b,Num *c) |
|
Line 201 void subbf(Num a,Num b,Num *c) |
|
MPFRTOBF(r,d); |
MPFRTOBF(r,d); |
*c = (Num)d; |
*c = (Num)d; |
} |
} |
|
if ( !cmpbf(*c,0) ) *c = 0; |
} |
} |
|
|
void mulbf(Num a,Num b,Num *c) |
void mulbf(Num a,Num b,Num *c) |
Line 252 void mulbf(Num a,Num b,Num *c) |
|
Line 261 void mulbf(Num a,Num b,Num *c) |
|
MPFRTOBF(r,d); |
MPFRTOBF(r,d); |
*c = (Num)d; |
*c = (Num)d; |
} |
} |
|
if ( !cmpbf(*c,0) ) *c = 0; |
} |
} |
|
|
void divbf(Num a,Num b,Num *c) |
void divbf(Num a,Num b,Num *c) |
Line 308 void divbf(Num a,Num b,Num *c) |
|
Line 318 void divbf(Num a,Num b,Num *c) |
|
MPFRTOBF(r,d); |
MPFRTOBF(r,d); |
*c = (Num)d; |
*c = (Num)d; |
} |
} |
|
if ( !cmpbf(*c,0) ) *c = 0; |
} |
} |
|
|
void pwrbf(Num a,Num b,Num *c) |
void pwrbf(Num a,Num b,Num *c) |
Line 367 void pwrbf(Num a,Num b,Num *c) |
|
Line 378 void pwrbf(Num a,Num b,Num *c) |
|
MPFRTOBF(r,d); |
MPFRTOBF(r,d); |
*c = (Num)d; |
*c = (Num)d; |
} |
} |
|
if ( !cmpbf(*c,0) ) *c = 0; |
} |
} |
|
|
void chsgnbf(Num a,Num *c) |
void chsgnbf(Num a,Num *c) |
Line 393 int cmpbf(Num a,Num b) |
|
Line 405 int cmpbf(Num a,Num b) |
|
GQ q; |
GQ q; |
|
|
if ( !a ) { |
if ( !a ) { |
if ( !b || (NID(b)<=N_A) ) |
if ( !b ) return 0; |
|
else if ((NID(b)<=N_A) ) |
return (*cmpnumt[NID(b)])(a,b); |
return (*cmpnumt[NID(b)])(a,b); |
else |
else |
return -mpfr_sgn(((BF)a)->body); |
return -mpfr_sgn(((BF)a)->body); |