source: git/libpolys/coeffs/rmodulo2m.h @ 121fd9

fieker-DuValspielwiese
Last change on this file since 121fd9 was 7a8011, checked in by Hans Schoenemann <hannes@…>, 13 years ago
more CoeffWrite: rings, long R, long C
  • Property mode set to 100644
File size: 3.0 KB
RevLine 
[4f8867]1#ifndef RMODULO2M_H
2#define RMODULO2M_H
[35b1d7]3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
[341696]6/* $Id$ */
[35b1d7]7/*
[e90dfd6]8* ABSTRACT: numbers modulo 2^m such that 2^m - 1
9*           fits in an unsigned long
[35b1d7]10*/
[c90b43]11#ifdef HAVE_RINGS
[2d805a]12#include <coeffs/coeffs.h>
13#include <coeffs/rintegers.h>
[f1c465f]14
15#ifndef NATNUMBER
16#define NATNUMBER unsigned long
17#endif
18
[1cce47]19BOOLEAN nr2mInitChar    (coeffs r, void*);
[35b1d7]20
[f1c465f]21number  nr2mCopy        (number a, const coeffs r);
[8d0331d]22BOOLEAN nr2mGreaterZero (number k, const coeffs r);
23number  nr2mMult        (number a, number b, const coeffs r);
24number  nr2mInit        (int i, const coeffs r);
25int     nr2mInt         (number &n, const coeffs r);
26number  nr2mAdd         (number a, number b, const coeffs r);
27number  nr2mSub         (number a, number b, const coeffs r);
28void    nr2mPower       (number a, int i, number * result, const coeffs r);
29BOOLEAN nr2mIsZero      (number a, const coeffs r);
30BOOLEAN nr2mIsOne       (number a, const coeffs r);
31BOOLEAN nr2mIsMOne      (number a, const coeffs r);
32BOOLEAN nr2mIsUnit      (number a, const coeffs r);
33number  nr2mGetUnit     (number a, const coeffs r);
34number  nr2mDiv         (number a, number b, const coeffs r);
35number  nr2mIntDiv      (number a,number b, const coeffs r);
36number  nr2mMod         (number a,number b, const coeffs r);
37number  nr2mNeg         (number c, const coeffs r);
38number  nr2mInvers      (number c, const coeffs r);
39BOOLEAN nr2mGreater     (number a, number b, const coeffs r);
40BOOLEAN nr2mDivBy       (number a, number b, const coeffs r);
41int     nr2mDivComp     (number a, number b, const coeffs r);
42BOOLEAN nr2mEqual       (number a, number b, const coeffs r);
43number  nr2mLcm         (number a, number b, const coeffs r);
44number  nr2mGcd         (number a, number b, const coeffs r);
45number  nr2mExtGcd      (number a, number b, number *s, number *t, const coeffs r);
[4cd3ee]46nMapFunc nr2mSetMap     (const coeffs src, const coeffs dst);
[8d0331d]47void    nr2mWrite       (number &a, const coeffs r);
48const char *  nr2mRead  (const char *s, number *a, const coeffs r);
49char *  nr2mName        (number n, const coeffs r);
[7a8011]50void    nr2mCoeffWrite  (const coeffs r);
[35b1d7]51#ifdef LDEBUG
[8d0331d]52BOOLEAN nr2mDBTest      (number a, const char *f, const int l, const coeffs r);
[35b1d7]53#endif
[8d0331d]54void    nr2mSetExp(int c, const coeffs r);
55void    nr2mInitExp(int c, const coeffs r);
[35b1d7]56
57
[8d0331d]58static inline number nr2mMultM(number a, number b, const coeffs r)
[35b1d7]59{
[76e501]60  return (number)
[e90dfd6]61    ((((NATNUMBER) a) * ((NATNUMBER) b)) & ((NATNUMBER)r->mod2mMask));
[35b1d7]62}
63
[8d0331d]64static inline number nr2mAddM(number a, number b, const coeffs r)
[35b1d7]65{
[76e501]66  return (number)
[e90dfd6]67    ((((NATNUMBER) a) + ((NATNUMBER) b)) & ((NATNUMBER)r->mod2mMask));
[35b1d7]68}
69
[8d0331d]70static inline number nr2mSubM(number a, number b, const coeffs r)
[35b1d7]71{
[e90dfd6]72  return (number)((NATNUMBER)a < (NATNUMBER)b ?
73                       r->mod2mMask - (NATNUMBER)b + (NATNUMBER)a + 1:
74                       (NATNUMBER)a - (NATNUMBER)b);
[35b1d7]75}
76
[e90dfd6]77#define nr2mNegM(A,r) (number)((r->mod2mMask - (NATNUMBER)(A) + 1) & r->mod2mMask)
[35b1d7]78#define nr2mEqualM(A,B)  ((A)==(B))
[4f8867]79
80#endif
81#endif
Note: See TracBrowser for help on using the repository browser.