source: git/Singular/longrat.h @ 4508ce5

spielwiese
Last change on this file since 4508ce5 was 4508ce5, checked in by Hans Schönemann <hannes@…>, 23 years ago
*hannes: nMap removed nSetMap returns now the routine git-svn-id: file:///usr/local/Singular/svn/trunk@4920 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.6 KB
Line 
1#ifndef LONGRAT_H
2#define LONGRAT_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: longrat.h,v 1.19 2000-12-15 18:49:33 Singular Exp $ */
7/*
8* ABSTRACT: computation with long rational numbers
9*/
10#include "structs.h"
11
12extern "C" {
13#include <gmp.h>
14}
15#ifdef HAVE_SMALLGMP
16#  define HAVE_LIBGMP2
17#else
18#if (__GNU_MP_VERSION > 1) && (__GNU_MP_VERSION_MINOR >= 0)
19#  define HAVE_LIBGMP2
20#else
21#  define HAVE_LIBGMP1
22#endif
23#endif
24
25typedef MP_INT lint;
26
27#define SR_INT    1
28#define INT_TO_SR(INT)  ((number) (((long)INT << 2) + SR_INT))
29#define SR_TO_INT(SR)   (((long)SR) >> 2)
30
31
32#define MP_SMALL 1
33
34#ifdef HAVE_LIBGMP1
35#define mpz_size1(A) (ABS((A)->size))
36#else
37#define mpz_size1(A) (ABS((A)->_mp_size))
38#endif
39//#define mpz_size1(A) mpz_size(A)
40
41struct snumber;
42typedef struct snumber rnumber;
43typedef rnumber * number;
44struct snumber
45{
46  lint z;
47  lint n;
48#if defined(LDEBUG)
49  int debug;
50#endif
51  BOOLEAN s;
52};
53
54// allow inlining only from p_Numbers.h and if ! LDEBUG
55
56#if defined(DO_LINLINE) && defined(P_NUMBERS_H) && !defined(LDEBUG)
57#define LINLINE static inline
58#else
59#define LINLINE
60#undef DO_LINLINE
61#endif // DO_LINLINE
62
63LINLINE BOOLEAN  nlEqual(number a, number b);
64LINLINE number   nlInit(int i);
65LINLINE BOOLEAN  nlIsOne(number a);
66LINLINE BOOLEAN  nlIsZero(number za);
67LINLINE number   nlCopy(number a);
68LINLINE void     nlNew(number *r);
69#ifndef LDEBUG
70LINLINE void     nlDelete(number *a);
71#endif
72LINLINE number   nlNeg(number za);
73LINLINE number   nlAdd(number la, number li);
74LINLINE number   nlSub(number la, number li);
75LINLINE number   nlMult(number a, number b);
76
77number   nlGcd(number a, number b);
78number   nlLcm(number a, number b);   /*special routine !*/
79BOOLEAN  nlGreater(number a, number b);
80BOOLEAN  nlIsMOne(number a);
81number   nlInit(number i);
82int      nlInt(number &n);
83BOOLEAN  nlGreaterZero(number za);
84number   nlInvers(number a);
85void     nlNormalize(number &x);
86number   nlDiv(number a, number b);
87number   nlExactDiv(number a, number b);
88number   nlIntDiv(number a, number b);
89number   nlIntMod(number a, number b);
90void     nlPower(number x, int exp, number *lu);
91char *   nlRead (char *s, number *a);
92void     nlWrite(number &a);
93int      nlModP(number n, int p);
94int      nlSize(number n);
95number   nlGetDenom(number &n);
96#ifdef LDEBUG
97BOOLEAN  nlDBTest(number a, char *f, int l);
98void     nlDBDelete(number *a, char *f, int l);
99#define  nlDelete(A) nlDBDelete(A,__FILE__,__LINE__)
100#endif
101
102nMapFunc nlSetMap(ring src, ring dst);
103
104#ifndef OM_ALLOC_H
105struct omBin_s;
106#endif
107extern omBin_s* rnumber_bin;
108
109#endif
110
111
Note: See TracBrowser for help on using the repository browser.