1 #ifndef NUMBERS_H 2 #define NUMBERS_H 3 /**************************************** 4 * Computer Algebra System SINGULAR * 5 ****************************************/ 6 /* 7 * ABSTRACT: compatility interface to coeffs 8 */ 9 #include "coeffs/coeffs.h" 10 11 // the access methods 12 // 13 // the routines w.r.t. currRing: 14 // (should only be used in the context of currRing, i.e. in t 15 #define nCopy(n) n_Copy(n, currRing->cf) 16 #define nDelete(n) n_Delete(n, currRing->cf) 17 #define nMult(n1, n2) n_Mult(n1, n2, currRing->cf) 18 #define nAdd(n1, n2) n_Add(n1, n2, currRing->cf) 19 #define nIsZero(n) n_IsZero(n, currRing->cf) 20 #define nEqual(n1, n2) n_Equal(n1, n2, currRing->cf) 21 #define nInpNeg(n) n_InpNeg(n, currRing->cf) 22 #define nSub(n1, n2) n_Sub(n1, n2, currRing->cf) 23 #define nGetChar() n_GetChar(currRing->cf) 24 #define nInit(i) n_Init(i, currRing->cf) 25 #define nIsOne(n) n_IsOne(n, currRing->cf) 26 #define nIsMOne(n) n_IsMOne(n, currRing->cf) 27 #define nGreaterZero(n) n_GreaterZero(n, currRing->cf) 28 #define nGreater(a, b) n_Greater (a,b,currRing->cf) 29 #define nWrite(n) n_Write(n, currRing->cf, rShortOut(currRing)) 30 #define nNormalize(n) n_Normalize(n,currRing->cf) 31 #define nGcd(a,b) n_Gcd(a,b,currRing->cf) 32 #define nDiv(a, b) n_Div(a,b,currRing->cf) 33 #define nInvers(a) n_Invers(a,currRing->cf) 34 #define nExactDiv(a, b) n_ExactDiv(a,b,currRing->cf) 35 #define nTest(a) n_Test(a,currRing->cf) 36 37 #define nInpMult(a, b) n_InpMult(a,b,currRing->cf) 38 #define nPower(a, b, res) n_Power(a,b,res,currRing->cf) 39 #define nSize(n) n_Size(n,currRing->cf) 40 #define nGetDenom(N) n_GetDenom((N),currRing->cf) 41 #define nGetNumerator(N) n_GetNumerator((N),currRing->cf) 42 43 #define nSetMap(R) n_SetMap(R,currRing->cf) 44 45 /// only for debug, over any initalized currRing 46 #define nPrint(a) n_Print(a,currRing->cf) 47 48 49 50 51 // -------------------------------------------------------------- 52 // internal to coeffs, but public for all realizations 53 54 #if SIZEOF_DOUBE == SIZEOF_LONG 55 #define SHORT_REAL_LENGTH 16 // use double for real <= 15 digits 56 #else 57 #define SHORT_REAL_LENGTH 6 // use float for real <= 6 digits 58 #endif 59 60 /* the dummy routines: */ 61 // void nDummy1(number* d); 62 // void ndDelete(number* d, const coeffs r); 63 number ndGcd(number a, number b, const coeffs); 64 // number ndCopy(number a, const coeffs r); 65 // int ndSize(number a, const coeffs r); 66 // number ndGetDenom(number &n, const coeffs r); 67 // number ndGetNumerator(number &a,const coeffs r); 68 // number ndReturn0(number n, const coeffs r); 69 // number ndIntMod(number a, number b, const coeffs r); 70 71 // void ndInpMult(number &a, number b, const coeffs r); 72 // void ndInpAdd(number &a, number b, const coeffs r); 73 74 // void ndKillChar(coeffs); 75 76 // number ndInit_bigint(number i, const coeffs dummy, const coeffs dst); 77 78 // BOOLEAN ndCoeffIsEqual(const coeffs r, n_coeffType n, void * parameter); 79 CanonicalForm ndConvSingNFactoryN( number, BOOLEAN /*setChar*/, const coeffs); 80 81 /// Test whether a is a zero divisor in r 82 /// i.e. not coprime with char. of r 83 /// very inefficient implementation: 84 /// should ONLY be used for debug stuff /tests 85 BOOLEAN n_IsZeroDivisor( number a, const coeffs r); 86 87 const char* const nDivBy0 = "div by 0"; 88 89 // dummy routines 90 void ndNormalize(number&, const coeffs); // nNormalize... 91 92 /// initialize an object of type coeff, return FALSE in case of success 93 typedef BOOLEAN (*cfInitCharProc)(coeffs, void *); 94 n_coeffType nRegister(n_coeffType n, cfInitCharProc p); 95 96 /// initialize an object of type coeffs by its name, return NULL otherwise 97 typedef coeffs (*cfInitCfByNameProc)(char *s,n_coeffType n); 98 void nRegisterCfByName(cfInitCfByNameProc p,n_coeffType n); 99 100 /// find an existing coeff by its "CoeffName" 101 coeffs nFindCoeffByName(char *n); 102 103 /// divide by the first (leading) number and return it, i.e. make monic 104 // void ndClearContent(ICoeffsEnumerator& numberCollectionEnumerator, number& c, const coeffs r); 105 106 /// does nothing (just returns a dummy one number) 107 // void ndClearDenominators(ICoeffsEnumerator& numberCollectionEnumerator, number& d, const coeffs r); 108 109 /// helper routine: read an int from a string (mod m), return a pointer to the rest 110 char* nEati(char *s, int *i, int m); 111 112 /// extracts a long integer from s, returns the rest 113 char * nEatLong(char *s, mpz_ptr i); 114 #endif 115