source: git/Singular/modulop.h @ c880d63

spielwiese
Last change on this file since c880d63 was c880d63, checked in by Hans Schönemann <hannes@…>, 23 years ago
*hannes: n_Procs git-svn-id: file:///usr/local/Singular/svn/trunk@4733 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.5 KB
Line 
1#ifndef MODULOP_H
2#define MODULOP_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: modulop.h,v 1.11 2000-11-16 16:52:37 Singular Exp $ */
7/*
8* ABSTRACT: numbers modulo p (<=32003)
9*/
10#include "structs.h"
11
12extern int npPrimeM;
13extern int npGen;
14extern int npMapPrime;
15
16BOOLEAN npGreaterZero (number k);
17number  npMult        (number a, number b);
18number  npInit        (int i);
19int     npInt         (number &n);
20number  npAdd         (number a, number b);
21number  npSub         (number a, number b);
22void    npPower       (number a, int i, number * result);
23BOOLEAN npIsZero      (number a);
24BOOLEAN npIsOne       (number a);
25BOOLEAN npIsMOne       (number a);
26number  npDiv         (number a, number b);
27number  npNeg         (number c);
28number  npInvers      (number c);
29BOOLEAN npGreater     (number a, number b);
30BOOLEAN npEqual       (number a, number b);
31void    npWrite       (number &a);
32char *  npRead        (char *s, number *a);
33#ifdef LDEBUG
34BOOLEAN npDBTest      (number a, char *f, int l);
35#endif
36void    npSetChar(int c, ring r);
37void    npInitChar(int c, ring r);
38
39//int     npGetChar();
40
41BOOLEAN npSetMap(ring r);
42number  npMapP(number from);
43/*-------specials for spolys, do NOT use otherwise--------------------------*/
44/* for npMultM, npSubM, npNegM, npEqualM : */
45extern int npPminus1M;
46extern CARDINAL *npExpTable;
47extern CARDINAL *npLogTable;
48
49inline number npMultM(number a, number b)
50{
51  int x = npLogTable[(int)a]+npLogTable[(int)b];
52  return (number)npExpTable[x<npPminus1M ? x : x-npPminus1M];
53}
54
55#if 0
56inline number npAddAsm(number a, number b, int m)
57{
58  number r;
59    asm ("addl %2, %1; cmpl %3, %1; jb 0f; subl %3, %1; 0:"
60         : "=&r" (r)
61         : "%0" (a), "g" (b), "g" (m)
62         : "cc");
63  return r;
64}
65inline number npSubAsm(number a, number b, int m)
66{
67  number r;
68  asm ("subl %2, %1; jnc 0f; addl %3, %1; 0:"
69        : "=&r" (r)
70        : "%0" (a), "g" (b), "g" (m)
71        : "cc");
72  return r;
73}
74#endif
75
76inline number npAddM(number a, number b)
77{
78  int r = (int)a + (int)b;
79  return (number)(r >= npPrimeM ? r - npPrimeM : r);
80}
81
82inline BOOLEAN npIsZeroM (number  a)
83{
84  return 0 == (int)a;
85}
86
87/*
88*inline number npMultM(number a, number b)
89*{
90*  return (number)(((int)a*(int)b) % npPrimeM);
91*}
92*/
93
94#define npSubM(a,b)    (number)((int)a<(int)b ?\
95                       npPrimeM-(int)b+(int)a : (int)a-(int)b)
96
97#define npNegM(A)      (number)(npPrimeM-(int)(A))
98#define npEqualM(A,B)  ((int)A==(int)B)
99#define npIsZeroM(a)   (0 == (int)a)
100#endif
101
Note: See TracBrowser for help on using the repository browser.