source: git/Singular/modulop.h @ fdc537

spielwiese
Last change on this file since fdc537 was a1e8742, checked in by Hans Schönemann <hannes@…>, 24 years ago
*hannes: npAdd/npSub git-svn-id: file:///usr/local/Singular/svn/trunk@4176 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.10 2000-03-02 18:44:39 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);
37//int     npGetChar();
38
39BOOLEAN npSetMap(ring r);
40number  npMapP(number from);
41/*-------specials for spolys, do NOT use otherwise--------------------------*/
42/* for npMultM, npSubM, npNegM, npEqualM : */
43extern int npPminus1M;
44extern CARDINAL *npExpTable;
45extern CARDINAL *npLogTable;
46
47inline number npMultM(number a, number b)
48{
49  int x = npLogTable[(int)a]+npLogTable[(int)b];
50  return (number)npExpTable[x<npPminus1M ? x : x-npPminus1M];
51}
52
53#if 0
54inline number npAddAsm(number a, number b, int m)
55{
56  number r;
57    asm ("addl %2, %1; cmpl %3, %1; jb 0f; subl %3, %1; 0:"
58         : "=&r" (r)
59         : "%0" (a), "g" (b), "g" (m)
60         : "cc");
61  return r;
62}
63inline number npSubAsm(number a, number b, int m)
64{
65  number r;
66  asm ("subl %2, %1; jnc 0f; addl %3, %1; 0:"
67        : "=&r" (r)
68        : "%0" (a), "g" (b), "g" (m)
69        : "cc");
70  return r;
71}
72#endif
73
74inline number npAddM(number a, number b)
75{
76  int r = (int)a + (int)b;
77  return (number)(r >= npPrimeM ? r - npPrimeM : r);
78}
79
80inline BOOLEAN npIsZeroM (number  a)
81{
82  return 0 == (int)a;
83}
84
85/*
86*inline number npMultM(number a, number b)
87*{
88*  return (number)(((int)a*(int)b) % npPrimeM);
89*}
90*/
91
92#define npSubM(a,b)    (number)((int)a<(int)b ?\
93                       npPrimeM-(int)b+(int)a : (int)a-(int)b)
94
95#define npNegM(A)      (number)(npPrimeM-(int)(A))
96#define npEqualM(A,B)  ((int)A==(int)B)
97#define npIsZeroM(a)   (0 == (int)a)
98#endif
99
Note: See TracBrowser for help on using the repository browser.