source: git/kernel/rmodulo2m.h @ bc669c

fieker-DuValspielwiese
Last change on this file since bc669c was 493225, checked in by Hans Schönemann <hannes@…>, 15 years ago
nWrite indep. from currRing git-svn-id: file:///usr/local/Singular/svn/trunk@12377 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.4 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 "structs.h"
12
13extern int nr2mExp;
14extern NATNUMBER nr2mModul;
15
16BOOLEAN nr2mGreaterZero (number k);
17number  nr2mMult        (number a, number b);
18number  nr2mInit        (int i, const ring r);
19int     nr2mInt         (number &n, const ring r);
20number  nr2mAdd         (number a, number b);
21number  nr2mSub         (number a, number b);
22void    nr2mPower       (number a, int i, number * result);
23BOOLEAN nr2mIsZero      (number a);
24BOOLEAN nr2mIsOne       (number a);
25BOOLEAN nr2mIsMOne      (number a);
26BOOLEAN nr2mIsUnit      (number a);
27number  nr2mGetUnit     (number a);
28number  nr2mDiv         (number a, number b);
29number  nr2mIntDiv      (number a,number b);
30number  nr2mMod         (number a,number b);
31number  nr2mNeg         (number c);
32number  nr2mInvers      (number c);
33BOOLEAN nr2mGreater     (number a, number b);
34BOOLEAN nr2mDivBy       (number a, number b);
35int     nr2mDivComp     (number a, number b);
36BOOLEAN nr2mEqual       (number a, number b);
37number  nr2mLcm         (number a,number b, ring r);
38number  nr2mGcd         (number a,number b,ring r);
39number  nr2mExtGcd      (number a, number b, number *s, number *t);
40nMapFunc nr2mSetMap     (const ring src, const ring dst);
41void    nr2mWrite       (number &a, const ring r);
42const char *  nr2mRead  (const char *s, number *a);
43char *  nr2mName        (number n);
44#ifdef LDEBUG
45BOOLEAN nr2mDBTest      (number a, const char *f, const int l);
46#endif
47void    nr2mSetExp(int c, const ring r);
48void    nr2mInitExp(int c, const ring r);
49
50
51static inline number nr2mMultM(number a, number b)
52{
53  return (number) 
54    ((((NATNUMBER) a)*((NATNUMBER) b)) % ((NATNUMBER) currRing->nr2mModul));
55}
56
57static inline number nr2mAddM(number a, number b)
58{
59  NATNUMBER r = (NATNUMBER)a + (NATNUMBER)b;
60  return (number) (r >= currRing->nr2mModul ? r - currRing->nr2mModul : r);
61}
62
63static inline number nr2mSubM(number a, number b)
64{
65  return (number)((NATNUMBER)a<(NATNUMBER)b ?
66                       currRing->nr2mModul-(NATNUMBER)b+(NATNUMBER)a : (NATNUMBER)a-(NATNUMBER)b);
67}
68
69#define nr2mNegM(A) (number)(currRing->nr2mModul-(NATNUMBER)(A))
70#define nr2mEqualM(A,B)  ((A)==(B))
71
72number nr2mMapQ(number from);
73#endif
74#endif
Note: See TracBrowser for help on using the repository browser.