11 #include <factory/factory.h>
23 #if defined(DO_LINLINE) && defined(P_NUMBERS_H) && !defined(LDEBUG)
24 #define LINLINE static FORCE_INLINE
90 #define nlTest(a, r) nlDBTest(a,__FILE__,__LINE__, r)
93 #define nlTest(a, r) do {} while (0)
100 #define MAX_NUM_SIZE 60
101 #define POW_2_28 (1L<<60)
102 #define POW_2_28_32 (1L<<28)
105 #define MAX_NUM_SIZE 28
106 #define POW_2_28 (1L<<28)
107 #define POW_2_28_32 (1L<<28)
115 if (mpz_cmp_ui(x->z,(
long)0)==0)
123 LONG ui=mpz_get_si(x->z);
124 if ((((ui<<3)>>3)==ui)
125 && (mpz_cmp_si(x->z,(
long)ui)==0))
148 #ifndef BYTES_PER_MP_LIMB
149 #define BYTES_PER_MP_LIMB sizeof(mp_limb_t)
159 #define mpz_isNeg(A) ((A)->_mp_size<0)
160 #define mpz_limb_size(A) ((A)->_mp_size)
161 #define mpz_limb_d(A) ((A)->_mp_d)
162 #define MPZ_DIV(A,B,C) mpz_tdiv_q((A),(B),(C))
163 #define MPZ_EXACTDIV(A,B,C) mpz_divexact((A),(B),(C))
180 #if (__GNU_MP_VERSION*10+__GNU_MP_VERSION_MINOR < 31)
216 mpz_init_set(z->z,(mpz_ptr) from);
241 mpz_init_set_ui(z->z,(
unsigned long) from);
254 Print(
"!!longrat: NULL in %s:%d\n",f,l);
258 if ((((
long)a)&3L)==3L)
260 Print(
" !!longrat:ptr(3) in %s:%d\n",f,l);
263 if ((((
long)a)&3L)==1L)
265 if (((((
LONG)(
long)a)<<1)>>1)!=((
LONG)(
long)a))
267 Print(
" !!longrat:arith:%lx in %s:%d\n",(
long)a, f,l);
277 if (a->debug!=123456)
279 Print(
"!!longrat:debug:%d in %s:%d\n",a->debug,f,l);
283 if ((a->s<0)||(a->s>4))
285 Print(
"!!longrat:s=%d in %s:%d\n",a->s,f,l);
293 if (a->z[0]._mp_alloc==0)
294 Print(
"!!longrat:z->alloc=0 in %s:%d\n",f,l);
298 if ((a->n[0]._mp_d[0]==0)&&(a->n[0]._mp_alloc<=1))
300 Print(
"!!longrat: n==0 in %s:%d\n",f,l);
308 if (a->z[0]._mp_alloc==0)
309 Print(
"!!longrat:n->alloc=0 in %s:%d\n",f,l);
310 if ((
mpz_size1(a->n) ==1) && (mpz_cmp_si(a->n,(
long)1)==0))
312 Print(
"!!longrat:integer as rational in %s:%d\n",f,l);
313 mpz_clear(a->n); a->s=3;
318 Print(
"!!longrat:div. by negative in %s:%d\n",f,l);
332 if ((((ui<<3)>>3)==ui)
333 && (mpz_cmp_si(a->z,(
long)ui)==0))
335 Print(
"!!longrat:im int %d in %s:%d\n",ui,f,l);
357 long lz=mpz_get_si(n->z);
358 if (mpz_cmp_si(n->z,lz)==0) term=lz;
361 mpz_init_set( dummy,n->z );
370 mpz_init_set( num, n->z );
371 mpz_init_set( den, n->n );
372 term =
make_cf( num, den, ( n->s != 1 ));
419 mpz_init_set_ui(h1,1);
420 while((FLT_RADIX*f) < DBL_MAX && i<DBL_MANT_DIG)
423 mpz_mul_ui(h1,h1,FLT_RADIX);
428 memcpy(&(re->n),&h1,
sizeof(h1));
430 if(f_sign==-1) re=
nlNeg(re,dst);
447 size = (*f)[0]._mp_size;
465 e=(*f)[0]._mp_exp-
size;
474 al = dest->_mp_size =
size;
476 dd = (mp_ptr)
omAlloc(
sizeof(mp_limb_t)*al);
477 for (i=0;i<
size;i++) dd[i] = qp[i];
479 nn = (mp_ptr)
omAlloc(
sizeof(mp_limb_t)*bl);
481 for (i=bl-2;i>=0;i--) nn[i] = 0;
484 ndest->_mp_alloc = ndest->_mp_size = bl;
489 al = dest->_mp_size = size+e;
491 dd = (mp_ptr)
omAlloc(
sizeof(mp_limb_t)*al);
492 for (i=0;i<
size;i++) dd[i+e] = qp[i];
493 for (i=0;i<e;i++) dd[i] = 0;
498 dest->_mp_alloc = al;
499 if (negative) dest->_mp_size = -dest->_mp_size;
583 int s=a->z[0]._mp_alloc;
592 int d=a->n[0]._mp_alloc;
617 long ul=mpz_get_si(i->z);
618 if (mpz_cmp_si(i->z,ul)!=0)
return 0;
629 if (mpz_cmp_si(tmp,ul)!=0) ul=0;
678 mpz_init_set_si(n->z,(
long)1);
679 mpz_init_set_si(n->n,(
long)
SR_TO_INT(a));
683 mpz_init_set_si(n->z,(
long)-1);
684 mpz_init_set_si(n->n,(
long)-
SR_TO_INT(a));
695 mpz_init_set(n->n,a->z);
700 mpz_init_set(n->z,a->n);
706 if (mpz_cmp_si(n->n,(
long)1)==0)
718 mpz_init_set_si(n->z,(
long)-1);
722 mpz_init_set_si(n->z,(
long)1);
832 mpz_init_set(u->z,a->z);
879 mpz_mod(u->z,aa,b->z);
897 mpz_mod(u->z,a->z,b->z);
919 return (mpz_divisible_ui_p(a->z,
SR_TO_INT(b))!=0);
922 return mpz_divisible_p(a->z, b->z) != 0;
929 if (
nlDivBy(b, a, r))
return 2;
932 if (
nlDivBy(b, a, r))
return 1;
946 long ch = r->cfInt(c, r);
957 dummy = (mpz_ptr)
omAlloc(
sizeof(mpz_t));
958 mpz_init_set_ui(dummy, ch);
961 info.
exp = (
unsigned long) 1;
1006 mpz_init_set_si(u->z,(
long)i);
1007 mpz_init_set_si(u->n,(
long)j);
1030 if (mpz_cmp(u->z,b->z)==0)
1036 mpz_init_set(u->n,b->z);
1039 else if (
SR_HDL(b) & SR_INT)
1045 mpz_init_set(u->n,a->n);
1065 mpz_init_set(u->n,b->z);
1066 if (a->s<2) mpz_mul(u->n,u->n,a->n);
1067 if (b->s<2) mpz_mul(u->z,u->z,b->n);
1075 if (mpz_cmp_si(u->n,(
long)1)==0)
1109 mpz_pow_ui((*u)->z,x->z,(
unsigned long)exp);
1112 if (mpz_cmp_si(x->n,(
long)1)==0)
1120 mpz_pow_ui((*u)->n,x->n,(
unsigned long)exp);
1132 if (exp<0)
Print(
"nlPower: neg. exp. %d\n",exp);
1196 if((i==0L)||(j==0L))
1214 if (((!(
SR_HDL(a) & SR_INT))&&(a->s<2))
1219 unsigned long t=mpz_gcd_ui(
NULL,b->z,(
long)aa);
1229 unsigned long t=mpz_gcd_ui(
NULL,a->z,(
long)bb);
1238 mpz_init(result->z);
1239 mpz_gcd(result->z,a->z,b->z);
1242 result->debug=123456;
1259 if (mpz_cmp_ui(x->z,(
long)0)==0)
1266 if (mpz_cmp(x->z,x->n)==0)
1289 if (mpz_cmp_si(x->n,(
long)1)==0)
1299 mpz_gcd(gcd,x->z,x->n);
1301 if (mpz_cmp_si(gcd,(
long)1)!=0)
1305 if (mpz_cmp_si(x->n,(
long)1)==0)
1334 result->debug=123456;
1339 mpz_init(result->z);
1343 mpz_gcd(gcd,a->z,b->n);
1344 if (mpz_cmp_si(gcd,(
long)1)!=0)
1347 mpz_init_set(bt,b->n);
1352 mpz_mul(result->z,bt,a->z);
1359 mpz_mul(result->z,b->n,a->z);
1384 const unsigned long PP =
p;
1387 number
z =
n_Init( static_cast<long>(mpz_fdiv_ui(q->z, PP)), Zp );
1393 number
n =
n_Init( static_cast<long>(mpz_fdiv_ui(q->n, PP)), Zp );
1422 WarnS(
"Omitted denominator during coefficient mapping !");
1424 mpz_set((mpz_ptr) n, i->z);
1439 if (!(
SR_HDL(n) & SR_INT))
1448 mpz_init_set(u->z,n->n);
1468 if (!(
SR_HDL(n) & SR_INT))
1475 mpz_init_set(u->z,n->z);
1498 if (a->s!=0)
return FALSE;
1499 number
n=
b; b=
a; a=
n;
1506 if (((
long)a > 0L) && (
mpz_isNeg(b->z)))
1508 if (((
long)a < 0L) && (!
mpz_isNeg(b->z)))
1511 mpz_init_set(bb,b->n);
1513 bo=(mpz_cmp(bb,b->z)==0);
1518 if (((a->s==1) && (b->s==3))
1519 || ((b->s==1) && (a->s==3)))
1527 mpz_init_set(aa,a->z);
1528 mpz_init_set(bb,b->z);
1529 if (a->s<2) mpz_mul(bb,bb,a->n);
1530 if (b->s<2) mpz_mul(aa,aa,b->n);
1531 bo=(mpz_cmp(aa,bb)==0);
1550 mpz_init_set(b->n,a->n);
1552 mpz_init_set(b->z,a->z);
1612 mpz_add(u->z,b->z,x);
1614 if (mpz_cmp_ui(u->z,(
long)0)==0)
1620 if (mpz_cmp(u->z,b->n)==0)
1626 mpz_init_set(u->n,b->n);
1636 if (mpz_cmp_ui(u->z,(
long)0)==0)
1663 mpz_mul(x,b->z,a->n);
1664 mpz_mul(u->z,a->z,b->n);
1665 mpz_add(u->z,u->z,x);
1668 if (mpz_cmp_ui(u->z,(
long)0)==0)
1675 mpz_mul(u->n,a->n,b->n);
1676 if (mpz_cmp(u->z,u->n)==0)
1688 mpz_mul(u->z,b->z,a->n);
1689 mpz_add(u->z,u->z,a->z);
1690 if (mpz_cmp_ui(u->z,(
long)0)==0)
1696 if (mpz_cmp(u->z,a->n)==0)
1702 mpz_init_set(u->n,a->n);
1716 mpz_mul(u->z,a->z,b->n);
1717 mpz_add(u->z,u->z,b->z);
1718 if (mpz_cmp_ui(u->z,(
long)0)==0)
1724 if (mpz_cmp(u->z,b->n)==0)
1730 mpz_init_set(u->n,b->n);
1736 mpz_add(u->z,a->z,b->z);
1737 if (mpz_cmp_ui(u->z,(
long)0)==0)
1767 mpz_add(a->z,a->z,x);
1786 else if (
SR_HDL(a) & SR_INT)
1802 mpz_add(u->z,b->z,x);
1805 mpz_init_set(u->n,b->n);
1840 mpz_mul(x,b->z,a->n);
1841 mpz_mul(y,a->z,b->n);
1845 mpz_mul(a->n,a->n,b->n);
1853 mpz_mul(x,b->z,a->n);
1854 mpz_add(a->z,a->z,x);
1872 mpz_mul(x,a->z,b->n);
1873 mpz_add(a->z,b->z,x);
1875 mpz_init_set(a->n,b->n);
1882 mpz_add(a->z,a->z,b->z);
1911 mpz_sub(u->z,x,b->z);
1913 if (mpz_cmp_ui(u->z,(
long)0)==0)
1919 if (mpz_cmp(u->z,b->n)==0)
1925 mpz_init_set(u->n,b->n);
1941 if (mpz_cmp_ui(u->z,(
long)0)==0)
1953 else if (
SR_HDL(b) & SR_INT)
1963 mpz_sub(u->z,a->z,x);
1965 if (mpz_cmp_ui(u->z,(
long)0)==0)
1971 if (mpz_cmp(u->z,a->n)==0)
1977 mpz_init_set(u->n,a->n);
1991 if (mpz_cmp_ui(u->z,(
long)0)==0)
2019 mpz_mul(x,b->z,a->n);
2020 mpz_mul(y,a->z,b->n);
2024 if (mpz_cmp_ui(u->z,(
long)0)==0)
2031 mpz_mul(u->n,a->n,b->n);
2032 if (mpz_cmp(u->z,u->n)==0)
2046 mpz_mul(x,b->z,a->n);
2047 mpz_sub(u->z,a->z,x);
2049 if (mpz_cmp_ui(u->z,(
long)0)==0)
2055 if (mpz_cmp(u->z,a->n)==0)
2061 mpz_init_set(u->n,a->n);
2077 mpz_mul(x,a->z,b->n);
2078 mpz_sub(u->z,x,b->z);
2080 if (mpz_cmp_ui(u->z,(
long)0)==0)
2086 if (mpz_cmp(u->z,b->n)==0)
2092 mpz_init_set(u->n,b->n);
2098 mpz_sub(u->z,a->z,b->z);
2099 if (mpz_cmp_ui(u->z,(
long)0)==0)
2148 if (u->s==1) u->s=0;
2151 mpz_mul_ui(u->z,b->z,(
unsigned long)
SR_TO_INT(a));
2163 mpz_mul_ui(u->z,b->z,(
unsigned long)-
SR_TO_INT(a));
2169 if (mpz_cmp(u->z,b->n)==0)
2175 mpz_init_set(u->n,b->n);
2184 mpz_mul(u->z,a->z,b->z);
2194 if (mpz_cmp(u->z,b->n)==0)
2200 mpz_init_set(u->n,b->n);
2207 if (mpz_cmp(u->z,a->n)==0)
2213 mpz_init_set(u->n,a->n);
2218 mpz_mul(u->n,a->n,b->n);
2219 if (mpz_cmp(u->z,u->n)==0)
2287 mpz_init_set_si(z->z,i);
2301 mpz_init_set_si(z->z,(
long)i);
2302 mpz_init_set_si(z->n,(
long)j);
2314 mpz_init_set(z->z,i);
2315 mpz_init_set(z->n,j);
2341 #if defined(DO_LINLINE) || !defined(P_NUMBERS_H)
2360 #if MAX_NUM_SIZE == 60
2361 if (((i << 3) >> 3) == i) n=
INT_TO_SR(i);
2365 if ( (((
long)ii==i) && ((ii << 3) >> 3) == ii )) n=
INT_TO_SR(ii);
2389 if (mpz_cmp_si(a->z,(
long)0)==0)
2391 printf(
"gmp-0 in nlIsZero\n");
2457 if ( ((r << 1) >> 1) == r )
2458 return (number)(long)r;
2476 if ( ((r << 1) >> 1) == r )
2499 number u=((number) ((r>>1)+
SR_INT));
2500 if (((((LONG)
SR_HDL(u))<<1)>>1)==
SR_HDL(u))
return (u);
2523 if ( ((r << 1) >> 1) == r )
2525 return (number)(long)r;
2547 mpz_mul(aa->z,a->z,b->z);
2552 mpz_init_set(a->n,b->n);
2560 mpz_mul(a->n,a->n,b->n);
2566 #endif // DO_LINLINE
2575 else mpz_init_set(m, (mpz_ptr)n->z);
2582 mpz_init_set(z->z, m);
2598 mpz_gcd(a->z,a->z,b->z);
2617 mpz_add(a->z,a->z,b->z);
2621 mpz_sub(a->z,a->z,b->z);
2623 mpz_add_ui(a->z,a->z,1);
2629 mpz_sub(a->z,a->z,b->z);
2633 mpz_add(a->z,a->z,b->z);
2635 mpz_sub_ui(a->z,a->z,1);
2644 mpz_t tmp; mpz_init(tmp);
2647 else mpz_init_set(N,nN->z);
2649 else mpz_init_set(P,nP->z);
2652 mpz_init_set_si(A,(
long)0);
2653 mpz_init_set_ui(B,(
unsigned long)1);
2654 mpz_init_set_si(C,(
long)0);
2658 while(mpz_cmp_si(N,(
long)0)!=0)
2661 mpz_add(tmp,tmp,tmp);
2662 if (mpz_cmp(tmp,P)<0)
2671 if (mpz_cmp_ui(tmp,1)==0)
2678 mpz_init_set(z->z,N);
2679 mpz_init_set(z->n,B);
2692 mpz_divmod(tmp,D,E,N);
2715 mpz_init((*s)->z); (*s)->s=3;
2717 mpz_init((*t)->z); (*t)->s=3;
2719 mpz_init(g->z); g->s=3;
2726 mpz_init_set(aa,a->z);
2734 mpz_init_set(bb,b->z);
2736 mpz_gcdext(g->z,(*s)->z,(*t)->z,aa,bb);
2748 PrintS(
"// characteristic : 0\n");
2750 PrintS(
"// coeff. ring is : Integers\n");
2761 for(i=rl-1;i>=0;i--)
2763 X[
i]=CF->convSingNFactoryN(x[i],
FALSE,CF);
2764 Q[
i]=CF->convSingNFactoryN(q[i],
FALSE,CF);
2771 number
n=CF->convFactoryNSingN(xnew,CF);
2774 number
p=CF->convFactoryNSingN(qnew,CF);
2778 number n2=
nlSub(n,p,CF);
2798 numberCollectionEnumerator.
Reset();
2800 if( !numberCollectionEnumerator.
MoveNext() )
2815 int normalcount = 0;
2818 number&
n = numberCollectionEnumerator.
Current();
2830 }
while (numberCollectionEnumerator.
MoveNext() );
2837 numberCollectionEnumerator.
Reset();
2839 while (numberCollectionEnumerator.
MoveNext() )
2841 number&
n = numberCollectionEnumerator.
Current();
2843 if( (--normalcount) <= 0)
2857 numberCollectionEnumerator.
Reset();
2859 while (numberCollectionEnumerator.
MoveNext() )
2861 number& nn = numberCollectionEnumerator.
Current();
2871 cand =
nlNeg(cand,cf);
2874 numberCollectionEnumerator.
Reset();
2876 while (numberCollectionEnumerator.
MoveNext() )
2878 number&
n = numberCollectionEnumerator.
Current();
2889 numberCollectionEnumerator.
Reset();
2891 if( !numberCollectionEnumerator.
MoveNext() )
2914 number& cand1 = numberCollectionEnumerator.
Current();
2919 if ((!(
SR_HDL(cand1)&SR_INT))
2924 mpz_init_set(cand->z, cand1->n);
2929 mpz_lcm(cand->z, cand->z, cand1->n);
2934 while (numberCollectionEnumerator.
MoveNext() );
2949 numberCollectionEnumerator.
Reset();
2950 while (numberCollectionEnumerator.
MoveNext() )
2952 number&
n = numberCollectionEnumerator.
Current();
2964 numberCollectionEnumerator.
Reset();
2967 cand =
nlNeg(cand, cf);
2971 while (numberCollectionEnumerator.
MoveNext() )
2973 number &
n = numberCollectionEnumerator.
Current();
2981 if (r->cfDiv==
nlDiv)
return (
char*)
"QQ";
2982 else return (
char*)
"ZZ";
2998 #if SIZEOF_LONG == 4
3005 fprintf(f,
"4 %d ",nnn);
3010 mpz_init_set_si(tmp,nn);
3021 fprintf(f,
"%d ",n->s+5);
3062 #if SIZEOF_LONG == 8
3091 #if SIZEOF_LONG == 8
3097 default:
Werror(
"error in reading number: invalid subtype %d",sub_type);
3118 number n2=
nlDiv(n1,g,r);
3130 number c=
nlDiv(a,b,cf);
3161 r->cfSubringGcd =
nlGcd;
3183 r->cfInpNeg =
nlNeg;
3229 r->has_simple_Alloc=
FALSE;
3230 r->has_simple_Inverse=
FALSE;
3237 number nlMod(number
a, number
b)
3259 mpz_mod(r->z,al->z,bl->z);
3264 LONG ui=(int)mpz_get_si(&r->z);
3265 if ((((ui<<3)>>3)==ui)
3266 && (mpz_cmp_si(
x->z,(
long)ui)==0))
3276 #endif // not P_NUMBERS_H
3277 #endif // LONGRAT_CC
void gmp_numerator(const CanonicalForm &f, mpz_ptr result)
number nlGetUnit(number n, const coeffs r)
LINLINE number nlSub(number la, number li, const coeffs r)
static void nlClearDenominators(ICoeffsEnumerator &numberCollectionEnumerator, number &c, const coeffs cf)
#define MPZ_EXACTDIV(A, B, C)
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)
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)
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)
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)
const CanonicalForm CFMap CFMap int &both_non_zero int n
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)
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)
void nlGMP(number &i, number n, const coeffs r)
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)
CanonicalForm make_cf(const mpz_ptr n)
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)
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)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
void _nlDelete_NoImm(number *a)
number nlModP(number q, const coeffs Q, const coeffs Zp)
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)
number nlCopyMap(number a, 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)
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
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 nlChineseRemainder(number *x, number *q, int rl, const coeffs C)
number nlBigInt(number &n)
void chineseRemainderCached(CFArray &a, CFArray &n, CanonicalForm &xnew, CanonicalForm &prod, CFArray &inv)
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)
number _nlNeg_NoImm(number a)
static number nlShort3(number x)
static number nlRandom(siRandProc p, number v2, number, const coeffs cf)
void gmp_denominator(const CanonicalForm &f, mpz_ptr result)
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)
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)
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)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL