source: git/kernel/rmodulo2m.h @ 35b1d7

spielwiese
Last change on this file since 35b1d7 was 35b1d7, checked in by Oliver Wienand <wienand@…>, 18 years ago
rmodulo2m.*: --> Routinen für Koeffizienten in Z/2^m git-svn-id: file:///usr/local/Singular/svn/trunk@8817 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 1.8 KB
Line 
1//#ifndef RMODULO2M_H
2//#define RMODULO2M_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: rmodulo2m.h,v 1.1 2005-11-27 16:30:09 wienand Exp $ */
7/*
8* ABSTRACT: numbers modulo 2^m
9*/
10#include "structs.h"
11
12extern int nr2mExp;
13extern long nr2mModul;
14
15BOOLEAN nr2mGreaterZero (number k);
16number  nr2mMult        (number a, number b);
17number  nr2mInit        (int i);
18int     nr2mInt         (number &n);
19number  nr2mAdd         (number a, number b);
20number  nr2mSub         (number a, number b);
21void    nr2mPower       (number a, int i, number * result);
22BOOLEAN nr2mIsZero      (number a);
23BOOLEAN nr2mIsOne       (number a);
24BOOLEAN nr2mIsMOne      (number a);
25number  nr2mDiv         (number a, number b);
26number  nr2mNeg         (number c);
27number  nr2mInvers      (number c);
28BOOLEAN nr2mGreater     (number a, number b);
29BOOLEAN nr2mEqual       (number a, number b);
30nMapFunc nr2mSetMap(ring src, ring dst);
31void    nr2mWrite       (number &a);
32char *  nr2mRead        (char *s, number *a);
33char *  nr2mName        (number n);
34#ifdef LDEBUG
35// BOOLEAN nr2mDBTest      (number a, char *f, int l);
36#endif
37void    nr2mSetExp(int c, ring r);
38void    nr2mInitExp(int c, ring r);
39
40
41static inline number nr2mMultM(number a, number b)
42{
43  return (number) 
44    ((((unsigned long) a)*((unsigned long) b)) % ((unsigned long) nr2mModul));
45}
46
47static inline number nr2mAddM(number a, number b)
48{
49  long r = (long)a + (long)b;
50  return (number) (r >= nr2mModul ? r - nr2mModul : r);
51}
52
53static inline number nr2mSubM(number a, number b)
54{
55  return (number)((long)a<(long)b ?
56                       nr2mModul-(long)b+(long)a : (long)a-(long)b);
57}
58
59#define nr2mNegM(A) (number)(nr2mModul-(long)(A))
60#define nr2mEqualM(A,B)  ((A)==(B))
Note: See TracBrowser for help on using the repository browser.