source: git/Singular/longrat.h @ 1fc83c0

spielwiese
Last change on this file since 1fc83c0 was 1fc83c0, checked in by Hans Schönemann <hannes@…>, 27 years ago
* hannes: added nExactDiv to numbers (numbers.*, longrat.*) corrected open bug in sing_dbm.cc (could only "r") simplified sing_dbm.cc (many tests already in silink.cc) (sing_dbm.cc, silink.h) added "mod" (as an alias to "%") (iparith.cc) updated singular.doc: div/mod, DBM: links ANSI-conversion in ndbm.cc (added return types, include files) git-svn-id: file:///usr/local/Singular/svn/trunk@614 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.3 KB
Line 
1#ifndef LONGRAT_H
2#define LONGRAT_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: longrat.h,v 1.8 1997-08-12 17:14:40 Singular Exp $ */
7/*
8* ABSTRACT: computation with long rational numbers
9*/
10#include "structs.h"
11
12#ifdef HAVE_GMP
13extern "C" {
14#include <gmp.h>
15}
16#ifdef HAVE_SMALLGMP
17#  define HAVE_LIBGMP2
18#else
19#if (__GNU_MP_VERSION > 1) && (__GNU_MP_VERSION_MINOR >= 0)
20#  define HAVE_LIBGMP2
21#else
22#  define HAVE_LIBGMP1
23#endif
24#endif
25
26typedef MP_INT lint;
27
28#define SR_INT    1
29#define INT_TO_SR(INT)  ((number) (((long)INT << 2) + SR_INT))
30
31#define MP_SMALL 1
32
33#ifdef HAVE_LIBGMP1
34#define mpz_size1(A) (ABS((A)->size))
35#else
36#define mpz_size1(A) (ABS((A)->_mp_size))
37#endif
38//#define mpz_size1(A) mpz_size(A)
39
40#else
41
42typedef unsigned short int16;
43typedef int16 * lint;
44#endif
45
46struct snumber;
47typedef struct snumber rnumber;
48typedef rnumber * number;
49struct snumber
50{
51  lint z;
52  lint n;
53#ifdef LDEBUG
54  int debug;
55#endif
56  BOOLEAN s;
57};
58
59number   nlGcd(number a, number b);
60number   nlLcm(number a, number b);   /*special routine !*/
61BOOLEAN  nlGreater(number a, number b);
62BOOLEAN  nlEqual(number a, number b);
63BOOLEAN  nlIsOne(number a);
64BOOLEAN  nlIsMOne(number a);
65void     nlNew(number *r);
66number   nlInit(int i);
67number   nlInit(number i);
68int      nlInt(number &n);
69BOOLEAN  nlIsZero(number za);
70BOOLEAN  nlGreaterZero(number za);
71number   nlNeg(number za);
72number   nlInvers(number a);
73void     nlNormalize(number &x);
74number   nlAdd(number la, number li);
75number   nlSub(number la, number li);
76number   nlMult(number a, number b);
77number   nlDiv(number a, number b);
78number   nlExactDiv(number a, number b);
79number   nlIntDiv(number a, number b);
80number   nlIntMod(number a, number b);
81void     nlPower(number x, int exp, number *lu);
82number   nlCopy(number a);
83char *   nlRead (char *s, number *a);
84void     nlWrite(number &a);
85int      nlModP(number n, int p);
86int      nlSize(number n);
87#ifdef LDEBUG
88BOOLEAN  nlDBTest(number a, char *f, int l);
89void     nlDBDelete(number *a, char *f, int l);
90#define  nlDelete(A) nlDBDelete(A,__FILE__,__LINE__)
91#else
92void     nlDelete(number *a);
93#endif
94
95BOOLEAN nlSetMap(int c, char ** par, int nop, number minpol);
96
97// internal use (longrat0) only:
98#ifndef HAVE_GMP
99void nlDivMod(lint a, int16 al, int16 b, int16 * r);
100#endif
101#endif
102
103
Note: See TracBrowser for help on using the repository browser.