source: git/kernel/rmodulo2m.h @ 5a9e7b

spielwiese
Last change on this file since 5a9e7b was 4f8867, checked in by Hans Schönemann <hannes@…>, 17 years ago
*hannes: experimental:HAVE_RING2TOM git-svn-id: file:///usr/local/Singular/svn/trunk@9544 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 1.9 KB
Line 
1#ifndef RMODULO2M_H
2#define RMODULO2M_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: rmodulo2m.h,v 1.3 2006-12-06 17:43:32 Singular Exp $ */
7/*
8* ABSTRACT: numbers modulo 2^m
9*/
10#ifdef HAVE_RING2TOM
11#include "structs.h"
12
13extern int nr2mExp;
14extern long nr2mModul;
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);
26number  nr2mDiv         (number a, number b);
27number   nr2mIntDiv      (number a,number b);
28number  nr2mNeg         (number c);
29number  nr2mInvers      (number c);
30BOOLEAN nr2mGreater     (number a, number b);
31BOOLEAN nr2mEqual       (number a, number b);
32number   nr2mLcm         (number a,number b, ring r);
33number   nr2mGcd         (number a,number b,ring r);
34nMapFunc nr2mSetMap(ring src, ring dst);
35void    nr2mWrite       (number &a);
36char *  nr2mRead        (char *s, number *a);
37char *  nr2mName        (number n);
38#ifdef LDEBUG
39// BOOLEAN nr2mDBTest      (number a, char *f, int l);
40#endif
41void    nr2mSetExp(int c, ring r);
42void    nr2mInitExp(int c, ring r);
43
44
45static inline number nr2mMultM(number a, number b)
46{
47  return (number) 
48    ((((unsigned long) a)*((unsigned long) b)) % ((unsigned long) nr2mModul));
49}
50
51static inline number nr2mAddM(number a, number b)
52{
53  long r = (long)a + (long)b;
54  return (number) (r >= nr2mModul ? r - nr2mModul : r);
55}
56
57static inline number nr2mSubM(number a, number b)
58{
59  return (number)((long)a<(long)b ?
60                       nr2mModul-(long)b+(long)a : (long)a-(long)b);
61}
62
63#define nr2mNegM(A) (number)(nr2mModul-(long)(A))
64#define nr2mEqualM(A,B)  ((A)==(B))
65
66#endif
67#endif
Note: See TracBrowser for help on using the repository browser.