source: git/coeffs/rmodulo2m.h @ 1cce47

spielwiese
Last change on this file since 1cce47 was 1cce47, checked in by Mohamed Barakat <mohamed.barakat@…>, 14 years ago
non-atomic: nField -> nCoeff error handling for initializing coeff
  • Property mode set to 100644
File size: 3.0 KB
Line 
1#ifndef RMODULO2M_H
2#define RMODULO2M_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id$ */
7/*
8* ABSTRACT: numbers modulo 2^m
9*/
10#ifdef HAVE_RINGS
11#include "coeffs.h"
12#include "rintegers.h"
13
14#ifndef NATNUMBER
15#define NATNUMBER unsigned long
16#endif
17
18
19BOOLEAN nr2mInitChar    (coeffs r, void*);
20
21extern int nr2mExp;
22extern NATNUMBER nr2mModul; /* for storing 2^m - 1, i.e., the
23                               bit pattern '11..1' of length m */
24
25number  nr2mCopy        (number a, const coeffs r);
26BOOLEAN nr2mGreaterZero (number k, const coeffs r);
27number  nr2mMult        (number a, number b, const coeffs r);
28number  nr2mInit        (int i, const coeffs r);
29int     nr2mInt         (number &n, const coeffs r);
30number  nr2mAdd         (number a, number b, const coeffs r);
31number  nr2mSub         (number a, number b, const coeffs r);
32void    nr2mPower       (number a, int i, number * result, const coeffs r);
33BOOLEAN nr2mIsZero      (number a, const coeffs r);
34BOOLEAN nr2mIsOne       (number a, const coeffs r);
35BOOLEAN nr2mIsMOne      (number a, const coeffs r);
36BOOLEAN nr2mIsUnit      (number a, const coeffs r);
37number  nr2mGetUnit     (number a, const coeffs r);
38number  nr2mDiv         (number a, number b, const coeffs r);
39number  nr2mIntDiv      (number a,number b, const coeffs r);
40number  nr2mMod         (number a,number b, const coeffs r);
41number  nr2mNeg         (number c, const coeffs r);
42number  nr2mInvers      (number c, const coeffs r);
43BOOLEAN nr2mGreater     (number a, number b, const coeffs r);
44BOOLEAN nr2mDivBy       (number a, number b, const coeffs r);
45int     nr2mDivComp     (number a, number b, const coeffs r);
46BOOLEAN nr2mEqual       (number a, number b, const coeffs r);
47number  nr2mLcm         (number a, number b, const coeffs r);
48number  nr2mGcd         (number a, number b, const coeffs r);
49number  nr2mExtGcd      (number a, number b, number *s, number *t, const coeffs r);
50nMapFunc nr2mSetMap     (const coeffs src, const coeffs dst);
51void    nr2mWrite       (number &a, const coeffs r);
52const char *  nr2mRead  (const char *s, number *a, const coeffs r);
53char *  nr2mName        (number n, const coeffs r);
54#ifdef LDEBUG
55BOOLEAN nr2mDBTest      (number a, const char *f, const int l, const coeffs r);
56#endif
57void    nr2mSetExp(int c, const coeffs r);
58void    nr2mInitExp(int c, const coeffs r);
59
60
61static inline number nr2mMultM(number a, number b, const coeffs r)
62{
63  return (number)
64    ((((NATNUMBER) a) * ((NATNUMBER) b)) & ((NATNUMBER) r->nr2mModul));
65}
66
67static inline number nr2mAddM(number a, number b, const coeffs r)
68{
69  return (number)
70    ((((NATNUMBER) a) + ((NATNUMBER) b)) & ((NATNUMBER) r->nr2mModul));
71}
72
73static inline number nr2mSubM(number a, number b, const coeffs r)
74{
75  return (number)((NATNUMBER)a<(NATNUMBER)b ?
76                       r->nr2mModul-(NATNUMBER)b+(NATNUMBER)a + 1: (NATNUMBER)a-(NATNUMBER)b);
77}
78
79#define nr2mNegM(A,r) (number)(r->nr2mModul-(NATNUMBER)(A) + 1)
80#define nr2mEqualM(A,B)  ((A)==(B))
81
82#endif
83#endif
Note: See TracBrowser for help on using the repository browser.