Macaulay2 Engine
Loading...
Searching...
No Matches
godboltTest.cpp
Go to the documentation of this file.
1
26
27int exp_table[] = {1,2,4,8,16,32,64,27,54,7,14,28,56,11,22,44,88,75,49,98,95,89,77,53,5,10,20,40,80,59,17,34,68,35,70,39,78,55,9,18,36,72,43,86,71,41,82,63,25,50,100,99,97,93,85,69,37,74,47,94,87,73,45,90,79,57,13,26,52,3,6,12,24,48,96,91,81,61,21,42,84,67,33,66,31,62,23,46,92,83,65,29,58,15,30,60,19,38,76,51,0};
28
29int log_table[] = {100,0,1,69,2,24,70,9,3,38,25,13,71,66,10,93,4,30,39,96,26,78,14,86,72,48,67,7,11,91,94,84,5,82,31,33,40,56,97,35,27,45,79,42,15,62,87,58,73,18,49,99,68,23,8,37,12,65,92,29,95,77,85,47,6,90,83,81,32,55,34,44,41,61,57,17,98,22,36,64,28,76,46,89,80,54,43,60,16,21,63,75,88,53,59,20,74,52,19,51,50};
30
31int exp_table2[] = {0,2,4,8,16,32,64,27,54,7,14,28,56,11,22,44,88,75,49,98,95,89,77,53,5,10,20,40,80,59,17,34,68,35,70,39,78,55,9,18,36,72,43,86,71,41,82,63,25,50,100,99,97,93,85,69,37,74,47,94,87,73,45,90,79,57,13,26,52,3,6,12,24,48,96,91,81,61,21,42,84,67,33,66,31,62,23,46,92,83,65,29,58,15,30,60,19,38,76,51,1};
32
33int log_table2[] = {0,100,1,69,2,24,70,9,3,38,25,13,71,66,10,93,4,30,39,96,26,78,14,86,72,48,67,7,11,91,94,84,5,82,31,33,40,56,97,35,27,45,79,42,15,62,87,58,73,18,49,99,68,23,8,37,12,65,92,29,95,77,85,47,6,90,83,81,32,55,34,44,41,61,57,17,98,22,36,64,28,76,46,89,80,54,43,60,16,21,63,75,88,53,59,20,74,52,19,51,50};
34
35int p1 = 100;
36int p = 101;
37int zero = 100;
38int minus_one = 50;
39
40// aring-zzp.hpp
41 void subtract_multiple(int &result, int a, int b)
42 {
43 // we assume: a, b are NONZERO!!
44 // result -= a*b
45 int ab = a + b;
46 if (ab > p1) ab -= p1;
47 int n = exp_table[result] - exp_table[ab];
48 if (n < 0) n += p;
49 result = log_table[n];
50 }
51
52// coeffrings.hpp
53 inline int modulus_add(int a, int b, int p)
54 {
55 int t = a + b;
56 return (t < p ? t : t - p);
57 }
58
59 inline int modulus_sub(int a, int b, int p)
60 {
61 int t = a - b;
62 return (t < 0 ? t + p : t);
63 }
64
65 void subtract(int &result, int a, int b)
66 {
67 if (b == zero)
68 result = a;
69 else if (a == zero)
71 else
72 {
73 int n = modulus_sub(exp_table[a], exp_table[b], p);
74 result = log_table[n];
75 }
76 }
77
78 void subtract_multiple2(int &result, int a, int b)
79 {
80 // we assume: a, b are NONZERO!!
81 // result -= a*b
82 int ab = modulus_add(a, b, p1);
84 return;
85 }
int exp_table[]
int minus_one
int log_table2[]
int p
int zero
int modulus_sub(int a, int b, int p)
int log_table[]
int p1
void subtract(int &result, int a, int b)
int exp_table2[]
int modulus_add(int a, int b, int p)
void subtract_multiple(int &result, int a, int b)
void subtract_multiple2(int &result, int a, int b)
VALGRIND_MAKE_MEM_DEFINED & result(result)