11 #include <factory/factory.h> 23 #if defined(DO_LINLINE) && defined(P_NUMBERS_H) && !defined(LDEBUG) 24 #define LINLINE static FORCE_INLINE 87 #define nlTest(a, r) nlDBTest(a,__FILE__,__LINE__, r) 90 #define nlTest(a, r) do {} while (0) 97 #define MAX_NUM_SIZE 60 98 #define POW_2_28 (1L<<60) 99 #define POW_2_28_32 (1L<<28) 102 #define MAX_NUM_SIZE 28 103 #define POW_2_28 (1L<<28) 104 #define POW_2_28_32 (1L<<28) 112 if (mpz_cmp_ui(
x->z,0L)==0)
120 LONG ui=mpz_get_si(
x->z);
121 if ((((ui<<3)>>3)==ui)
122 && (mpz_cmp_si(
x->z,(
long)ui)==0))
145 #ifndef BYTES_PER_MP_LIMB 146 #define BYTES_PER_MP_LIMB sizeof(mp_limb_t) 156 #define mpz_isNeg(A) ((A)->_mp_size<0) 157 #define mpz_limb_size(A) ((A)->_mp_size) 158 #define mpz_limb_d(A) ((A)->_mp_d) 175 #if (__GNU_MP_VERSION*10+__GNU_MP_VERSION_MINOR < 31) 211 mpz_init_set(
z->z,(mpz_ptr) from);
235 mpz_init_set_ui(
z->z,(
unsigned long) from);
248 Print(
"!!longrat: NULL in %s:%d\n",
f,
l);
252 if ((((
long)
a)&3L)==3L)
254 Print(
" !!longrat:ptr(3) in %s:%d\n",
f,
l);
257 if ((((
long)
a)&3L)==1L)
259 if (((((
LONG)(
long)
a)<<1)>>1)!=((
LONG)(
long)
a))
261 Print(
" !!longrat:arith:%lx in %s:%d\n",(
long)
a,
f,
l);
271 if (
a->debug!=123456)
273 Print(
"!!longrat:debug:%d in %s:%d\n",
a->debug,
f,
l);
277 if ((
a->s<0)||(
a->s>4))
279 Print(
"!!longrat:s=%d in %s:%d\n",
a->s,
f,
l);
287 if (
a->z[0]._mp_alloc==0)
288 Print(
"!!longrat:z->alloc=0 in %s:%d\n",
f,
l);
292 if ((
a->n[0]._mp_d[0]==0)&&(
a->n[0]._mp_alloc<=1))
294 Print(
"!!longrat: n==0 in %s:%d\n",
f,
l);
302 if (
a->z[0]._mp_alloc==0)
303 Print(
"!!longrat:n->alloc=0 in %s:%d\n",
f,
l);
304 if ((
mpz_size1(
a->n) ==1) && (mpz_cmp_si(
a->n,1L)==0))
306 Print(
"!!longrat:integer as rational in %s:%d\n",
f,
l);
307 mpz_clear(
a->n);
a->s=3;
312 Print(
"!!longrat:div. by negative in %s:%d\n",
f,
l);
326 if ((((ui<<3)>>3)==ui)
327 && (mpz_cmp_si(
a->z,(
long)ui)==0))
329 Print(
"!!longrat:im int %d in %s:%d\n",ui,
f,
l);
351 long lz=mpz_get_si(
n->z);
352 if (mpz_cmp_si(
n->z,lz)==0)
term=lz;
355 mpz_init_set( dummy,
n->z );
364 mpz_init_set(
num,
n->z );
365 mpz_init_set(
den,
n->n );
387 if (
f.den().isOne() )
415 mpz_init_set_ui(h1,1);
416 while((FLT_RADIX*
f) < DBL_MAX &&
i<DBL_MANT_DIG)
419 mpz_mul_ui(h1,h1,FLT_RADIX);
424 memcpy(&(re->n),&h1,
sizeof(h1));
426 if(f_sign==-1) re=
nlNeg(re,dst);
443 size = (*f)[0]._mp_size;
461 e=(*f)[0]._mp_exp-
size;
468 void* (*allocfunc) (size_t);
469 mp_get_memory_functions (&allocfunc,
NULL,
NULL);
472 al = dest->_mp_size =
size;
474 dd = (mp_ptr)allocfunc(
sizeof(mp_limb_t)*al);
477 nn = (mp_ptr)allocfunc(
sizeof(mp_limb_t)*bl);
481 ndest->_mp_alloc = ndest->_mp_size = bl;
486 al = dest->_mp_size =
size+e;
488 dd = (mp_ptr)allocfunc(
sizeof(mp_limb_t)*al);
490 for (
i=0;
i<e;
i++) dd[
i] = 0;
495 dest->_mp_alloc = al;
580 int s=
a->z[0]._mp_alloc;
589 int d=
a->n[0]._mp_alloc;
614 long ul=mpz_get_si(
i->z);
615 if (mpz_cmp_si(
i->z,ul)!=0)
return 0;
621 mpz_tdiv_q(tmp,
i->z,
i->n);
626 if (mpz_cmp_si(tmp,ul)!=0) ul=0;
645 mpz_tdiv_q(tmp->z,
i->z,
i->n);
675 mpz_init_set_ui(
n->z,1L);
680 mpz_init_set_si(
n->z,-1L);
691 mpz_init_set(
n->n,
a->z);
697 mpz_init_set(
n->z,
a->n);
703 if (mpz_cmp_ui(
n->n,1L)==0)
716 mpz_init_set_si(
n->z,-1L);
720 mpz_init_set_ui(
n->z,1L);
775 mpz_divexact(u->z,
a->z,
b->z);
820 if (rr<0) rr+=
ABS(bb);
850 mpz_init_set(u->z,
a->z);
855 else mpz_sub(u->z,u->z,rr->z);
856 mpz_divexact(u->z,u->z,
b->z);
903 mpz_init_set_si(aa, ai);
910 mpz_mod(u->z, aa,
b->z);
928 mpz_mod(u->z,
a->z,
b->z);
953 return mpz_divisible_p(
a->z,
b->z) != 0;
975 long ch =
r->cfInt(c,
r);
986 mpz_init_set_ui(dummy, ch);
989 info.exp = (
unsigned long) 1;
1020 if (
j==1L)
return a;
1035 mpz_init_set_si(u->z,(
long)
i);
1036 mpz_init_set_si(u->n,(
long)
j);
1059 if (mpz_cmp(u->z,
b->z)==0)
1065 mpz_init_set(u->n,
b->z);
1074 mpz_init_set(u->n,
a->n);
1094 mpz_init_set(u->n,
b->z);
1095 if (
a->s<2) mpz_mul(u->n,u->n,
a->n);
1096 if (
b->s<2) mpz_mul(u->z,u->z,
b->n);
1104 if (mpz_cmp_si(u->n,1L)==0)
1138 mpz_pow_ui((*u)->z,
x->z,(
unsigned long)
exp);
1141 if (mpz_cmp_si(
x->n,1L)==0)
1149 mpz_pow_ui((*u)->n,
x->n,(
unsigned long)
exp);
1225 if((
i==0L)||(
j==0L))
1248 unsigned long t=mpz_gcd_ui(
NULL,
b->z,(
long)aa);
1258 unsigned long t=mpz_gcd_ui(
NULL,
a->z,(
long)bb);
1331 if (mpz_cmp_ui(
x->z,0L)==0)
1338 if (mpz_cmp(
x->z,
x->n)==0)
1361 if (mpz_cmp_si(
x->n,1L)==0)
1371 mpz_gcd(
gcd,
x->z,
x->n);
1373 if (mpz_cmp_si(
gcd,1L)!=0)
1375 mpz_divexact(
x->z,
x->z,
gcd);
1376 mpz_divexact(
x->n,
x->n,
gcd);
1377 if (mpz_cmp_si(
x->n,1L)==0)
1415 mpz_gcd(
gcd,
a->z,
b->n);
1416 if (mpz_cmp_si(
gcd,1L)!=0)
1420 mpz_divexact(bt,
b->n,
gcd);
1456 const unsigned long PP =
p;
1459 number
z =
n_Init( static_cast<long>(mpz_fdiv_ui(q->z, PP)), Zp );
1465 number
n =
n_Init( static_cast<long>(mpz_fdiv_ui(q->n, PP)), Zp );
1494 WarnS(
"Omitted denominator during coefficient mapping !");
1520 mpz_init_set(u->z,
n->n);
1547 mpz_init_set(u->z,
n->z);
1570 if (
a->s!=0)
return FALSE;
1585 bo=(mpz_cmp(bb,
b->z)==0);
1590 if (((
a->s==1) && (
b->s==3))
1591 || ((
b->s==1) && (
a->s==3)))
1599 mpz_init_set(aa,
a->z);
1600 mpz_init_set(bb,
b->z);
1601 if (
a->s<2) mpz_mul(bb,bb,
a->n);
1602 if (
b->s<2) mpz_mul(aa,aa,
b->n);
1603 bo=(mpz_cmp(aa,bb)==0);
1622 mpz_init_set(
b->n,
a->n);
1624 mpz_init_set(
b->z,
a->z);
1662 #define GCD_NORM_COND(OLD,NEW) (mpz_size1(NEW->z)>mpz_size1(OLD->z)) 1668 mpz_gcd(
gcd,
x->z,
x->n);
1670 if (mpz_cmp_si(
gcd,1L)!=0)
1672 mpz_divexact(
x->z,
x->z,
gcd);
1673 mpz_divexact(
x->n,
x->n,
gcd);
1674 if (mpz_cmp_si(
x->n,1L)==0)
1707 mpz_add(u->z,
b->z,
x);
1709 if (mpz_cmp_ui(u->z,0L)==0)
1715 if (mpz_cmp(u->z,
b->n)==0)
1721 mpz_init_set(u->n,
b->n);
1753 mpz_mul(
x,
b->z,
a->n);
1754 mpz_mul(u->z,
a->z,
b->n);
1755 mpz_add(u->z,u->z,
x);
1758 if (mpz_cmp_ui(u->z,0L)==0)
1765 mpz_mul(u->n,
a->n,
b->n);
1766 if (mpz_cmp(u->z,u->n)==0)
1779 mpz_mul(u->z,
b->z,
a->n);
1780 mpz_add(u->z,u->z,
a->z);
1781 if (mpz_cmp_ui(u->z,0L)==0)
1787 if (mpz_cmp(u->z,
a->n)==0)
1793 mpz_init_set(u->n,
a->n);
1808 mpz_mul(u->z,
a->z,
b->n);
1809 mpz_add(u->z,u->z,
b->z);
1810 if (mpz_cmp_ui(u->z,0L)==0)
1816 if (mpz_cmp(u->z,
b->n)==0)
1822 mpz_init_set(u->n,
b->n);
1829 mpz_add(u->z,
a->z,
b->z);
1854 mpz_add(
a->z,
a->z,
x);
1888 mpz_add(u->z,
b->z,
x);
1891 mpz_init_set(u->n,
b->n);
1927 mpz_mul(
x,
b->z,
a->n);
1928 mpz_mul(
y,
a->z,
b->n);
1932 mpz_mul(
a->n,
a->n,
b->n);
1942 mpz_mul(
x,
b->z,
a->n);
1943 mpz_add(
a->z,
a->z,
x);
1962 mpz_mul(
x,
a->z,
b->n);
1963 mpz_add(
a->z,
b->z,
x);
1965 mpz_init_set(
a->n,
b->n);
1973 mpz_add(
a->z,
a->z,
b->z);
2002 mpz_sub(u->z,
x,
b->z);
2004 if (mpz_cmp_ui(u->z,0L)==0)
2010 if (mpz_cmp(u->z,
b->n)==0)
2016 mpz_init_set(u->n,
b->n);
2049 mpz_sub(u->z,
a->z,
x);
2051 if (mpz_cmp_ui(u->z,0L)==0)
2057 if (mpz_cmp(u->z,
a->n)==0)
2063 mpz_init_set(u->n,
a->n);
2100 mpz_mul(
x,
b->z,
a->n);
2101 mpz_mul(
y,
a->z,
b->n);
2105 if (mpz_cmp_ui(u->z,0L)==0)
2112 mpz_mul(u->n,
a->n,
b->n);
2113 if (mpz_cmp(u->z,u->n)==0)
2128 mpz_mul(
x,
b->z,
a->n);
2129 mpz_sub(u->z,
a->z,
x);
2131 if (mpz_cmp_ui(u->z,0L)==0)
2137 if (mpz_cmp(u->z,
a->n)==0)
2143 mpz_init_set(u->n,
a->n);
2160 mpz_mul(
x,
a->z,
b->n);
2161 mpz_sub(u->z,
x,
b->z);
2163 if (mpz_cmp_ui(u->z,0L)==0)
2169 if (mpz_cmp(u->z,
b->n)==0)
2175 mpz_init_set(u->n,
b->n);
2182 mpz_sub(u->z,
a->z,
b->z);
2226 if (u->s==1) u->s=0;
2229 mpz_mul_ui(u->z,
b->z,(
unsigned long)
SR_TO_INT(
a));
2241 mpz_mul_ui(u->z,
b->z,(
unsigned long)-
SR_TO_INT(
a));
2247 if (mpz_cmp(u->z,
b->n)==0)
2253 mpz_init_set(u->n,
b->n);
2263 mpz_mul(u->z,
a->z,
b->z);
2273 if (mpz_cmp(u->z,
b->n)==0)
2279 mpz_init_set(u->n,
b->n);
2287 if (mpz_cmp(u->z,
a->n)==0)
2293 mpz_init_set(u->n,
a->n);
2299 mpz_mul(u->n,
a->n,
b->n);
2300 if (mpz_cmp(u->z,u->n)==0)
2369 mpz_init_set_si(
z->z,
i);
2383 mpz_init_set_si(
z->z,(
long)
i);
2384 mpz_init_set_si(
z->n,(
long)
j);
2396 mpz_init_set(
z->z,
i);
2397 mpz_init_set(
z->n,
j);
2423 #if defined(DO_LINLINE) || !defined(P_NUMBERS_H) 2442 #if MAX_NUM_SIZE == 60 2447 if ( ((((
long)ii)==
i) && ((ii << 3) >> 3) == ii ))
n=
INT_TO_SR(ii);
2471 if (mpz_cmp_si(
a->z,0L)==0)
2473 printf(
"gmp-0 in nlIsZero\n");
2539 if ( ((
r << 1) >> 1) ==
r )
2540 return (number)(long)
r;
2558 if ( ((
r << 1) >> 1) ==
r )
2581 number u=((number) ((
r>>1)+
SR_INT));
2605 if ( ((
r << 1) >> 1) ==
r )
2607 return (number)(long)
r;
2629 mpz_mul(aa->z,
a->z,
b->z);
2634 mpz_init_set(
a->n,
b->n);
2642 mpz_mul(
a->n,
a->n,
b->n);
2648 #endif // DO_LINLINE 2657 else mpz_init_set(
m, (mpz_ptr)
n->z);
2668 mpz_init_set(
z->z,
m);
2694 mpz_init_set(aa,
a->z);
2702 mpz_init_set(bb,
b->z);
2704 mpz_t erg; mpz_t bs; mpz_t bt;
2709 mpz_gcdext(erg, bs, bt, aa, bb);
2711 mpz_div(aa, aa, erg);
2754 rr = mpz_divmod_ui(qq, rrr,
a->z, (
unsigned long)
ABS(
SR_TO_INT(
b)));
2768 mpz_divmod(qq, rr,
a->z,
b->z);
2788 mpz_gcd(
a->z,
a->z,
b->z);
2805 else mpz_sub(
a->z,
a->z,rr->z);
2806 mpz_divexact(
a->z,
a->z,
b->z);
2813 mpz_t tmp; mpz_init(tmp);
2816 else mpz_init_set(
N,nN->z);
2818 else mpz_init_set(
P,nP->z);
2821 mpz_init_set_si(
A,0L);
2822 mpz_init_set_ui(
B,(
unsigned long)1);
2823 mpz_init_set_si(C,0L);
2827 while(mpz_cmp_si(
N,0L)!=0)
2830 mpz_add(tmp,tmp,tmp);
2831 if (mpz_cmp(tmp,
P)<0)
2840 if (mpz_cmp_ui(tmp,1)==0)
2847 mpz_init_set(
z->z,
N);
2848 mpz_init_set(
z->n,
B);
2861 mpz_divmod(tmp,
D,
E,
N);
2884 mpz_init((*s)->z); (*s)->s=3;
2886 mpz_init((*t)->z); (*t)->s=3;
2888 mpz_init(
g->z);
g->s=3;
2896 aa=(mpz_ptr)
omAlloc(
sizeof(mpz_t));
2905 bb=(mpz_ptr)
omAlloc(
sizeof(mpz_t));
2912 mpz_gcdext(
g->z,(*s)->z,(*t)->z,aa,bb);
2945 for(
i=rl-1;
i>=0;
i--)
2947 X[
i]=CF->convSingNFactoryN(
x[
i],
FALSE,CF);
2948 Q[
i]=CF->convSingNFactoryN(q[
i],
FALSE,CF);
2955 number
n=CF->convFactoryNSingN(xnew,CF);
2958 number
p=CF->convFactoryNSingN(qnew,CF);
2961 else p2=CF->cfDiv(
p,CF->cfInit(2, CF),CF);
2962 if (CF->cfGreater(
n,
p2,CF))
2964 number n2=CF->cfSub(
n,
p,CF);
2965 CF->cfDelete(&
n,CF);
2968 CF->cfDelete(&
p2,CF);
2969 CF->cfDelete(&
p,CF);
2971 CF->cfNormalize(
n,CF);
2975 number nlChineseRemainder(number *
x, number *q,
int rl,
const coeffs C)
2986 numberCollectionEnumerator.
Reset();
2988 if( !numberCollectionEnumerator.
MoveNext() )
3003 int normalcount = 0;
3006 number&
n = numberCollectionEnumerator.
Current();
3018 }
while (numberCollectionEnumerator.
MoveNext() );
3025 numberCollectionEnumerator.
Reset();
3027 while (numberCollectionEnumerator.
MoveNext() )
3029 number&
n = numberCollectionEnumerator.
Current();
3031 if( (--normalcount) <= 0)
3045 numberCollectionEnumerator.
Reset();
3047 while (numberCollectionEnumerator.
MoveNext() )
3049 number& nn = numberCollectionEnumerator.
Current();
3062 numberCollectionEnumerator.
Reset();
3064 while (numberCollectionEnumerator.
MoveNext() )
3066 number&
n = numberCollectionEnumerator.
Current();
3077 numberCollectionEnumerator.
Reset();
3079 if( !numberCollectionEnumerator.
MoveNext() )
3102 number& cand1 = numberCollectionEnumerator.
Current();
3112 mpz_init_set(
cand->z, cand1->n);
3117 mpz_lcm(
cand->z,
cand->z, cand1->n);
3122 while (numberCollectionEnumerator.
MoveNext() );
3137 numberCollectionEnumerator.
Reset();
3138 while (numberCollectionEnumerator.
MoveNext() )
3140 number&
n = numberCollectionEnumerator.
Current();
3152 numberCollectionEnumerator.
Reset();
3159 while (numberCollectionEnumerator.
MoveNext() )
3161 number &
n = numberCollectionEnumerator.
Current();
3169 if (
r->cfDiv==
nlDiv)
return (
char*)
"QQ";
3170 else return (
char*)
"ZZ";
3184 #if SIZEOF_LONG == 4 3191 fprintf(
f,
"4 %d ",nnn);
3196 mpz_init_set_si(tmp,nn);
3207 fprintf(
f,
"%d ",
n->s+5);
3248 #if SIZEOF_LONG == 8 3277 #if SIZEOF_LONG == 8 3283 default:
Werror(
"error in reading number: invalid subtype %d",sub_type);
3415 r->has_simple_Alloc=
FALSE;
3416 r->has_simple_Inverse=
FALSE;
3423 number nlMod(number
a, number
b)
3445 mpz_mod(
r->z,al->z,bl->z);
3450 LONG ui=(int)mpz_get_si(&
r->z);
3451 if ((((ui<<3)>>3)==ui)
3452 && (mpz_cmp_si(
x->z,(
long)ui)==0))
3462 #endif // not P_NUMBERS_H 3463 #endif // LONGRAT_CC
LINLINE number nlSub(number la, number li, const coeffs r)
static void nlClearDenominators(ICoeffsEnumerator &numberCollectionEnumerator, number &c, const coeffs cf)
const CanonicalForm int s
const CanonicalForm int const CFList const Variable & y
void mpz_mul_si(mpz_ptr r, mpz_srcptr s, long int si)
#define omCheckAddrSize(addr, size)
BOOLEAN nlCoeffIsEqual(const coeffs r, n_coeffType n, void *p)
only used if HAVE_RINGS is defined
static FORCE_INLINE BOOLEAN nCoeff_is_Zp(const coeffs r)
static int int_extgcd(int a, int b, int *u, int *x, int *v, int *y)
char * nlCoeffName(const coeffs r)
long npInt(number &n, const coeffs r)
static number nlConvFactoryNSingN(const CanonicalForm f, const coeffs r)
BOOLEAN nlGreaterZero(number za, const coeffs r)
number nlModP(number q, const coeffs, const coeffs Zp)
static void nlMPZ(mpz_t m, number &n, const coeffs r)
number _nlMult_aNoImm_OR_bNoImm(number a, number b)
number nlShort1(number x)
number nlNormalizeHelper(number a, number b, const coeffs r)
number ndCopyMap(number a, const coeffs aRing, const coeffs r)
static FORCE_INLINE BOOLEAN nCoeff_is_long_R(const coeffs r)
LINLINE void nlInpAdd(number &a, number b, const coeffs r)
number nlGetDenom(number &n, const coeffs r)
void nlWrite(number a, const coeffs r)
int nlSize(number a, const coeffs)
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE BOOLEAN nCoeff_is_R(const coeffs r)
#define omCheckIf(cond, test)
#define omFreeSize(addr, size)
LINLINE number nlAdd(number la, number li, const coeffs r)
void nlInpGcd(number &a, number b, const coeffs r)
BOOLEAN nlIsMOne(number a, const coeffs r)
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_2toM(const coeffs r)
(), see rinteger.h, new impl.
void nlCoeffWrite(const coeffs r, BOOLEAN details)
number nlIntDiv(number a, number b, const coeffs r)
number nlGetUnit(number n, const coeffs cf)
static FORCE_INLINE int n_GetChar(const coeffs r)
Return the characteristic of the coeff. domain.
number nlGcd(number a, number b, const coeffs r)
coeffs nlQuot1(number c, const coeffs r)
number nlInit2(int i, int j, const coeffs r)
create a rational i/j (implicitly) over Q NOTE: make sure to use correct Q in debug mode ...
const char * nlRead(const char *s, number *a, const coeffs r)
void WerrorS(const char *s)
void s_readmpz_base(s_buff F, mpz_ptr a, int base)
CanonicalForm make_cf(const mpz_ptr n)
number nlIntMod(number a, number b, const coeffs r)
number nlInit2gmp(mpz_t i, mpz_t j, const coeffs r)
create a rational i/j (implicitly) over Q NOTE: make sure to use correct Q in debug mode ...
BOOLEAN nlInitChar(coeffs r, void *p)
BOOLEAN nlGreater(number a, number b, const coeffs r)
LINLINE number nl_Copy(number a, const coeffs r)
static number nlInitMPZ(mpz_t m, const coeffs)
real floating point (GMP) numbers
number nlMapZ(number from, const coeffs src, const coeffs dst)
LINLINE BOOLEAN nlIsOne(number a, const coeffs r)
virtual void Reset()=0
Sets the enumerator to its initial position: -1, which is before the first element in the collection...
single prescision (6,6) real numbers
static number nlLcm(number a, number b, const coeffs r)
static number nlMapP(number from, const coeffs src, const coeffs dst)
LINLINE number nlNeg(number za, const coeffs r)
number nlXExtGcd(number a, number b, number *s, number *t, number *u, number *v, const coeffs r)
float nrFloat(number n)
Converts a n_R number into a float. Needed by Maps.
Coefficient rings, fields and other domains suitable for Singular polynomials.
void s_readmpz(s_buff F, mpz_t a)
const CanonicalForm CFMap CFMap & N
number nlDiv(number a, number b, const coeffs r)
LINLINE number nlMult(number a, number b, const coeffs r)
number nlInvers(number a, const coeffs r)
number _nlCopy_NoImm(number a)
void _nlInpAdd_aNoImm_OR_bNoImm(number &a, number b)
The main handler for Singular numbers which are suitable for Singular polynomials.
Templated enumerator interface for simple iteration over a generic collection of T's.
int nlDivComp(number a, number b, const coeffs r)
LINLINE void nlInpMult(number &a, number b, const coeffs r)
static void nlWriteFd(number n, FILE *f, const coeffs)
const ExtensionInfo & info
< [in] sqrfree poly
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
void _nlDelete_NoImm(number *a)
virtual reference Current()=0
Gets the current element in the collection (read and write).
static number nlMapLongR(number from, const coeffs src, const coeffs dst)
static const int SW_RATIONAL
set to 1 for computations over Q
const char *const nDivBy0
LINLINE BOOLEAN nlEqual(number a, number b, const coeffs r)
void nlPower(number x, int exp, number *lu, const coeffs r)
void PrintS(const char *s)
number nlQuotRem(number a, number b, number *r, const coeffs R)
static number nlReadFd(s_buff f, const coeffs)
void nlInpIntDiv(number &a, number b, const coeffs r)
number nlExtGcd(number a, number b, number *s, number *t, const coeffs)
LINLINE BOOLEAN nlIsZero(number za, const coeffs r)
(mpz_ptr), see rmodulon,h
void nlGMP(number &i, mpz_t n, const coeffs r)
static void nlNormalize_Gcd(number &x)
BOOLEAN _nlEqual_aNoImm_OR_bNoImm(number a, number b)
number nlShort3_noinline(number x)
static void nlClearContent(ICoeffsEnumerator &numberCollectionEnumerator, number &c, const coeffs cf)
static CanonicalForm nlConvSingNFactoryN(number n, const BOOLEAN setChar, const coeffs)
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
number nlBigInt(number &n)
void chineseRemainderCached(CFArray &a, CFArray &n, CanonicalForm &xnew, CanonicalForm &prod, CFArray &inv)
void gmp_numerator(const CanonicalForm &f, mpz_ptr result)
void nlNormalize(number &x, const coeffs r)
void chineseRemainder(const CanonicalForm &x1, const CanonicalForm &q1, const CanonicalForm &x2, const CanonicalForm &q2, CanonicalForm &xnew, CanonicalForm &qnew)
void chineseRemainder ( const CanonicalForm & x1, const CanonicalForm & q1, const CanonicalForm & x2...
number nlChineseRemainderSym(number *x, number *q, int rl, BOOLEAN sym, CFArray &inv_cache, const coeffs CF)
const Variable & v
< [in] a sqrfree bivariate poly
number _nlNeg_NoImm(number a)
static number nlShort3(number x)
static number nlRandom(siRandProc p, number v2, number, const coeffs cf)
REvaluation E(1, terms.length(), IntRandom(25))
LINLINE void nlDelete(number *a, const coeffs r)
static FORCE_INLINE number n_Div(number a, number b, const coeffs r)
return the quotient of 'a' and 'b', i.e., a/b; raises an error if 'b' is not invertible in r exceptio...
BOOLEAN nlDivBy(number a, number b, const coeffs)
virtual bool MoveNext()=0
Advances the enumerator to the next element of the collection. returns true if the enumerator was suc...
BOOLEAN nlIsUnit(number a, const coeffs)
long nlInt(number &n, const coeffs r)
number _nlMult_aImm_bImm_rNoImm(number a, number b)
nMapFunc nlSetMap(const coeffs src, const coeffs dst)
number _nlAdd_aNoImm_OR_bNoImm(number a, number b)
#define GCD_NORM_COND(OLD, NEW)
long s_readlong(s_buff F)
number nlExactDiv(number a, number b, const coeffs r)
number _nlSub_aNoImm_OR_bNoImm(number a, number b)
number nlMapGMP(number from, const coeffs src, const coeffs dst)
BOOLEAN nlDBTest(number a, const char *f, const int l)
LINLINE number nlInit(long i, const coeffs r)
static char * nlCoeffString(const coeffs r)
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
number nlMapMachineInt(number from, const coeffs, const coeffs)
number nlCopyMap(number a, const coeffs, const coeffs)
static number nlMapR(number from, const coeffs src, const coeffs dst)
number nlGetNumerator(number &n, const coeffs r)
LINLINE number nlCopy(number a, const coeffs r)
void Werror(const char *fmt,...)
const CanonicalForm const CanonicalForm const CanonicalForm const CanonicalForm & cand
number nlFarey(number nN, number nP, const coeffs CF)
void gmp_denominator(const CanonicalForm &f, mpz_ptr result)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL