source: git/kernel/rmodulo2m.h @ d51339

spielwiese
Last change on this file since d51339 was c81a40, checked in by Oliver Wienand <wienand@…>, 16 years ago
Maps für Bigint Modul bei Z/m wird nun als GMP gespeichert git-svn-id: file:///usr/local/Singular/svn/trunk@10870 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.3 KB
RevLine 
[4f8867]1#ifndef RMODULO2M_H
2#define RMODULO2M_H
[35b1d7]3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
[c81a40]6/* $Id: rmodulo2m.h,v 1.10 2008-07-16 12:41:33 wienand Exp $ */
[35b1d7]7/*
8* ABSTRACT: numbers modulo 2^m
9*/
[4f8867]10#ifdef HAVE_RING2TOM
[35b1d7]11#include "structs.h"
12
13extern int nr2mExp;
[994445]14extern NATNUMBER nr2mModul;
[35b1d7]15
16BOOLEAN nr2mGreaterZero (number k);
17number  nr2mMult        (number a, number b);
18number  nr2mInit        (int i);
19int     nr2mInt         (number &n);
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);
[1e579c6]26BOOLEAN nr2mIsUnit      (number a);
27number  nr2mGetUnit     (number a);
[35b1d7]28number  nr2mDiv         (number a, number b);
[206e158]29number  nr2mIntDiv      (number a,number b);
[35b1d7]30number  nr2mNeg         (number c);
31number  nr2mInvers      (number c);
32BOOLEAN nr2mGreater     (number a, number b);
[009d80]33BOOLEAN nr2mDivBy       (number a, number b);
[d351d8]34int     nr2mDivComp     (number a, number b);
[35b1d7]35BOOLEAN nr2mEqual       (number a, number b);
[206e158]36number  nr2mLcm         (number a,number b, ring r);
37number  nr2mGcd         (number a,number b,ring r);
[1e579c6]38number  nr2mExtGcd      (number a, number b, number *s, number *t);
[206e158]39nMapFunc nr2mSetMap     (ring src, ring dst);
[35b1d7]40void    nr2mWrite       (number &a);
[85e68dd]41const char *  nr2mRead  (const char *s, number *a);
[35b1d7]42char *  nr2mName        (number n);
43#ifdef LDEBUG
[85e68dd]44BOOLEAN nr2mDBTest      (number a, const char *f, const int l);
[35b1d7]45#endif
46void    nr2mSetExp(int c, ring r);
47void    nr2mInitExp(int c, ring r);
48
49
50static inline number nr2mMultM(number a, number b)
51{
52  return (number) 
[994445]53    ((((NATNUMBER) a)*((NATNUMBER) b)) % ((NATNUMBER) nr2mModul));
[35b1d7]54}
55
56static inline number nr2mAddM(number a, number b)
57{
[994445]58  NATNUMBER r = (NATNUMBER)a + (NATNUMBER)b;
[35b1d7]59  return (number) (r >= nr2mModul ? r - nr2mModul : r);
60}
61
62static inline number nr2mSubM(number a, number b)
63{
[994445]64  return (number)((NATNUMBER)a<(NATNUMBER)b ?
65                       nr2mModul-(NATNUMBER)b+(NATNUMBER)a : (NATNUMBER)a-(NATNUMBER)b);
[35b1d7]66}
67
[994445]68#define nr2mNegM(A) (number)(nr2mModul-(NATNUMBER)(A))
[35b1d7]69#define nr2mEqualM(A,B)  ((A)==(B))
[4f8867]70
[c81a40]71number nr2mMapQ(number from);
[4f8867]72#endif
73#endif
Note: See TracBrowser for help on using the repository browser.