source: git/coeffs/rmodulo2m.h @ 502f7e8

fieker-DuValspielwiese
Last change on this file since 502f7e8 was 14b11bb, checked in by Frank Seelisch <seelisch@…>, 14 years ago
more changes for Z/n and Z/2^m
  • 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
13extern int nr2mExp;
14extern NATNUMBER nr2mModul; /* for storing 2^m - 1, i.e., the
15                               bit pattern '11..1' of length m */
16
17/* next method is for initializing function pointers */
18void    nr2mCoeffInit   (n_Procs_s *n, int c, const coeffs r);
19
20number  nr2mCopy        (number a, const coeffs r);
21BOOLEAN nr2mGreaterZero (number k, const coeffs r);
22number  nr2mMult        (number a, number b, const coeffs r);
23number  nr2mInit        (int i, const coeffs r);
24int     nr2mInt         (number &n, const coeffs r);
25number  nr2mAdd         (number a, number b, const coeffs r);
26number  nr2mSub         (number a, number b, const coeffs r);
27void    nr2mPower       (number a, int i, number * result, const coeffs r);
28BOOLEAN nr2mIsZero      (number a, const coeffs r);
29BOOLEAN nr2mIsOne       (number a, const coeffs r);
30BOOLEAN nr2mIsMOne      (number a, const coeffs r);
31BOOLEAN nr2mIsUnit      (number a, const coeffs r);
32number  nr2mGetUnit     (number a, const coeffs r);
33number  nr2mDiv         (number a, number b, const coeffs r);
34number  nr2mIntDiv      (number a,number b, const coeffs r);
35number  nr2mMod         (number a,number b, const coeffs r);
36number  nr2mNeg         (number c, const coeffs r);
37number  nr2mInvers      (number c, const coeffs r);
38BOOLEAN nr2mGreater     (number a, number b, const coeffs r);
39BOOLEAN nr2mDivBy       (number a, number b, const coeffs r);
40int     nr2mDivComp     (number a, number b, const coeffs r);
41BOOLEAN nr2mEqual       (number a, number b, const coeffs r);
42number  nr2mLcm         (number a, number b, const coeffs r);
43number  nr2mGcd         (number a, number b, const coeffs r);
44number  nr2mExtGcd      (number a, number b, number *s, number *t, const coeffs r);
45nMapFunc nr2mSetMap     (const ring src, const ring dst);
46void    nr2mWrite       (number &a, const coeffs r);
47const char *  nr2mRead  (const char *s, number *a, const coeffs r);
48char *  nr2mName        (number n, const coeffs r);
49#ifdef LDEBUG
50BOOLEAN nr2mDBTest      (number a, const char *f, const int l, const coeffs r);
51#endif
52void    nr2mSetExp(int c, const coeffs r);
53void    nr2mInitExp(int c, const coeffs r);
54
55
56static inline number nr2mMultM(number a, number b, const coeffs r)
57{
58  return (number)
59    ((((NATNUMBER) a) * ((NATNUMBER) b)) & ((NATNUMBER) r->nr2mModul));
60}
61
62static inline number nr2mAddM(number a, number b, const coeffs r)
63{
64  return (number)
65    ((((NATNUMBER) a) + ((NATNUMBER) b)) & ((NATNUMBER) r->nr2mModul));
66}
67
68static inline number nr2mSubM(number a, number b, const coeffs r)
69{
70  return (number)((NATNUMBER)a<(NATNUMBER)b ?
71                       r->nr2mModul-(NATNUMBER)b+(NATNUMBER)a + 1: (NATNUMBER)a-(NATNUMBER)b);
72}
73
74#define nr2mNegM(A,r) (number)(r->nr2mModul-(NATNUMBER)(A) + 1)
75#define nr2mEqualM(A,B)  ((A)==(B))
76
77#endif
78#endif
Note: See TracBrowser for help on using the repository browser.