version 1.1, 2018/09/19 05:45:07 |
version 1.3, 2019/06/04 07:11:23 |
|
|
/* |
/* |
* $OpenXM$ |
* $OpenXM: OpenXM_contrib2/asir2018/engine/p-itv.c,v 1.2 2018/09/28 08:20:28 noro Exp $ |
*/ |
*/ |
#if defined(INTERVAL) |
#if defined(INTERVAL) |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
|
#if 0 |
#if defined(PARI) |
#if defined(PARI) |
#include "genpari.h" |
#include "genpari.h" |
#endif |
#endif |
|
#endif |
|
|
|
// in engine/bf.c |
|
Num tobf(Num,int); |
|
//int initvp(Num , Itv ); |
|
|
|
extern int mpfr_roundmode; |
|
|
extern int zerorewrite; |
extern int zerorewrite; |
|
|
void itvtois(Itv a, Num *inf, Num *sup) |
void itvtois(Itv a, Num *inf, Num *sup) |
Line 25 void itvtois(Itv a, Num *inf, Num *sup) |
|
Line 33 void itvtois(Itv a, Num *inf, Num *sup) |
|
void istoitv(Num inf, Num sup, Itv *rp) |
void istoitv(Num inf, Num sup, Itv *rp) |
{ |
{ |
Num i, s; |
Num i, s; |
|
Num ni, ns; |
Itv c; |
Itv c; |
int type=0; |
int type=0; |
|
int current_roundmode; |
|
|
if ( !inf && !sup ) { |
if ( !inf && !sup ) { |
*rp = 0; |
*rp = 0; |
return; |
return; |
} |
} |
if ( !sup ) { |
if ( compnum(0,sup,inf) >= 0 ) { |
|
ns = sup; ni = inf; |
|
} else { |
|
ni = sup; ns = inf; |
|
} |
|
|
|
current_roundmode = mpfr_roundmode; |
|
if ( !ns ) { |
s = 0; |
s = 0; |
} |
} |
else if ( NID( sup )==N_B ) { |
else if ( NID( ns )==N_B ) { |
type = 1; |
type = 1; |
ToBf(sup, (BF *)&s); |
|
|
mpfr_roundmode = MPFR_RNDU; |
|
s = tobf(ns, DEFAULTPREC); |
|
//ToBf(sup, (BF *)&s); |
} else { |
} else { |
s = sup; |
s = ns; |
} |
} |
if ( !inf ) { |
if ( !ni ) { |
i = 0; |
i = 0; |
} |
} |
else if ( NID( inf )==N_B ) { |
else if ( NID( ni )==N_B ) { |
type = 1; |
type = 1; |
ToBf(inf, (BF *)&i); |
|
|
mpfr_roundmode = MPFR_RNDD; |
|
i = tobf(inf, DEFAULTPREC); |
|
//ToBf(inf, (BF *)&i); |
} else { |
} else { |
i = inf; |
i = ni; |
} |
} |
|
mpfr_roundmode = current_roundmode; |
|
|
if ( type ) { |
if ( type ) { |
// NEWIntervalBigFloat((IntervalBigFloat)c); |
IntervalBigFloat cc; |
c=MALLOC(sizeof(struct oIntervalBigFloat)); |
NEWIntervalBigFloat(cc); |
OID(c)=O_N; |
c = (Itv)cc; |
NID(c)=N_IntervalBigFloat; |
} else { |
} else |
|
NEWItvP(c); |
NEWItvP(c); |
|
} |
|
INF(c) = i; SUP(c) = s; |
|
|
if ( compnum(0,i,s) >= 0 ) { |
if (zerorewrite && initvp(0,c) ) { |
INF(c) = s; SUP(c) = i; |
*rp = 0; |
|
zerorewriteCount++; |
} else { |
} else { |
INF(c) = i; SUP(c) = s; |
*rp = c; |
} |
} |
|
|
if (zerorewrite) |
|
if ( initvp(0,c) ) { |
|
*rp = 0; |
|
return; |
|
} |
|
*rp = c; |
|
} |
} |
|
|
void additvp(Itv a, Itv b, Itv *c) |
void additvp(Itv a, Itv b, Itv *c) |