source: git/kernel/rmodulo2m.h @ 76e501

spielwiese
Last change on this file since 76e501 was 76e501, checked in by Frank Seelisch <seelisch@…>, 14 years ago
extends Z/2^m to m =32 resp. 64 (depending on platform) git-svn-id: file:///usr/local/Singular/svn/trunk@13036 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.5 KB
RevLine 
[4f8867]1#ifndef RMODULO2M_H
2#define RMODULO2M_H
[35b1d7]3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
[341696]6/* $Id$ */
[35b1d7]7/*
8* ABSTRACT: numbers modulo 2^m
9*/
[c90b43]10#ifdef HAVE_RINGS
[599326]11#include <kernel/structs.h>
[35b1d7]12
13extern int nr2mExp;
[76e501]14extern NATNUMBER nr2mModul; /* for storing 2^m - 1, i.e., the
15                               bit pattern '11..1' of length m */
[35b1d7]16
17BOOLEAN nr2mGreaterZero (number k);
18number  nr2mMult        (number a, number b);
[8391d8]19number  nr2mInit        (int i, const ring r);
[cf74cd6]20int     nr2mInt         (number &n, const ring r);
[35b1d7]21number  nr2mAdd         (number a, number b);
22number  nr2mSub         (number a, number b);
23void    nr2mPower       (number a, int i, number * result);
24BOOLEAN nr2mIsZero      (number a);
25BOOLEAN nr2mIsOne       (number a);
26BOOLEAN nr2mIsMOne      (number a);
[1e579c6]27BOOLEAN nr2mIsUnit      (number a);
28number  nr2mGetUnit     (number a);
[35b1d7]29number  nr2mDiv         (number a, number b);
[206e158]30number  nr2mIntDiv      (number a,number b);
[6ea941]31number  nr2mMod         (number a,number b);
[35b1d7]32number  nr2mNeg         (number c);
33number  nr2mInvers      (number c);
34BOOLEAN nr2mGreater     (number a, number b);
[009d80]35BOOLEAN nr2mDivBy       (number a, number b);
[d351d8]36int     nr2mDivComp     (number a, number b);
[35b1d7]37BOOLEAN nr2mEqual       (number a, number b);
[206e158]38number  nr2mLcm         (number a,number b, ring r);
39number  nr2mGcd         (number a,number b,ring r);
[1e579c6]40number  nr2mExtGcd      (number a, number b, number *s, number *t);
[208e0c]41nMapFunc nr2mSetMap     (const ring src, const ring dst);
[493225]42void    nr2mWrite       (number &a, const ring r);
[85e68dd]43const char *  nr2mRead  (const char *s, number *a);
[35b1d7]44char *  nr2mName        (number n);
45#ifdef LDEBUG
[85e68dd]46BOOLEAN nr2mDBTest      (number a, const char *f, const int l);
[35b1d7]47#endif
[b064be]48void    nr2mSetExp(int c, const ring r);
49void    nr2mInitExp(int c, const ring r);
[35b1d7]50
51
52static inline number nr2mMultM(number a, number b)
53{
[76e501]54  return (number)
55    ((((NATNUMBER) a) * ((NATNUMBER) b)) & ((NATNUMBER) currRing->nr2mModul));
[35b1d7]56}
57
58static inline number nr2mAddM(number a, number b)
59{
[76e501]60  return (number)
61    ((((NATNUMBER) a) + ((NATNUMBER) b)) & ((NATNUMBER) currRing->nr2mModul));
[35b1d7]62}
63
64static inline number nr2mSubM(number a, number b)
65{
[76e501]66  return (number)((NATNUMBER)a < (NATNUMBER)b ?
67                     currRing->nr2mModul - (NATNUMBER)b + (NATNUMBER)a + 1 :
68                     (NATNUMBER)a - (NATNUMBER)b);
[35b1d7]69}
70
[76e501]71#define nr2mNegM(A) (number)(currRing->nr2mModul - (NATNUMBER)(A) + 1)
[35b1d7]72#define nr2mEqualM(A,B)  ((A)==(B))
[4f8867]73
[c81a40]74number nr2mMapQ(number from);
[4f8867]75#endif
76#endif
Note: See TracBrowser for help on using the repository browser.