Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Testing latest pari + WASM + node.js... and it works?! Wow.

28495 views
License: GPL3
ubuntu2004
1
#line 2 "../src/kernel/none/cmp.c"
2
/* Copyright (C) 2002-2003 The PARI group.
3
4
This file is part of the PARI/GP package.
5
6
PARI/GP is free software; you can redistribute it and/or modify it under the
7
terms of the GNU General Public License as published by the Free Software
8
Foundation; either version 2 of the License, or (at your option) any later
9
version. It is distributed in the hope that it will be useful, but WITHOUT
10
ANY WARRANTY WHATSOEVER.
11
12
Check the License for details. You should have received a copy of it, along
13
with the package; see the file 'COPYING'. If not, write to the Free Software
14
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
15
16
17
/********************************************************************/
18
/** **/
19
/** Comparison routines **/
20
/** **/
21
/********************************************************************/
22
23
/*They depend on cmpiispec and equaliispec in mp.c*/
24
25
int
26
equalii(GEN x, GEN y)
27
{
28
if ((x[1] & (LGBITS|SIGNBITS)) != (y[1] & (LGBITS|SIGNBITS))) return 0;
29
return equaliispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
30
}
31
32
int
33
cmpii(GEN x, GEN y)
34
{
35
const long sx = signe(x), sy = signe(y);
36
if (sx<sy) return -1;
37
if (sx>sy) return 1;
38
if (!sx) return 0;
39
if (sx>0)
40
return cmpiispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
41
else
42
return -cmpiispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
43
}
44
45
int
46
equalrr(GEN x, GEN y)
47
{
48
long lx, ly, i;
49
50
if (!signe(x)) {
51
if (!signe(y)) return 1; /* all zeroes are equal */
52
return expo(x) >= expo(y);
53
}
54
if (!signe(y))
55
return expo(y) >= expo(x);
56
57
if (x[1] != y[1]) return 0;
58
59
lx = lg(x);
60
ly = lg(y);
61
if (lx < ly)
62
{
63
i=2; while (i<lx && x[i]==y[i]) i++;
64
if (i<lx) return 0;
65
for (; i < ly; i++) if (y[i]) return 0;
66
}
67
else
68
{
69
i=2; while (i<ly && x[i]==y[i]) i++;
70
if (i<ly) return 0;
71
for (; i < lx; i++) if (x[i]) return 0;
72
}
73
return 1;
74
}
75
76
int
77
cmprr(GEN x, GEN y)
78
{
79
const long sx = signe(x), sy = signe(y);
80
long ex,ey,lx,ly,lz,i;
81
82
if (!sx) {
83
if (!sy || expo(x) >= expo(y)) return 0;
84
return sy > 0? -1: 1;
85
}
86
if (!sy) {
87
if (expo(y) >= expo(x)) return 0;
88
return sx > 0? 1: -1;
89
}
90
if (sx<sy) return -1;
91
if (sx>sy) return 1;
92
93
ex=expo(x); ey=expo(y);
94
if (ex>ey) return sx;
95
if (ex<ey) return -sx;
96
97
lx=lg(x); ly=lg(y); lz = (lx<ly)?lx:ly;
98
i=2; while (i<lz && x[i]==y[i]) i++;
99
if (i<lz) return ((ulong)x[i] > (ulong)y[i]) ? sx : -sx;
100
if (lx>=ly)
101
{
102
while (i<lx && !x[i]) i++;
103
return (i==lx) ? 0 : sx;
104
}
105
while (i<ly && !y[i]) i++;
106
return (i==ly) ? 0 : -sx;
107
}
108
109
/* x and y are integers. Return 1 if |x| == |y|, 0 otherwise */
110
int
111
absequalii(GEN x, GEN y)
112
{
113
if (!signe(x)) return !signe(y);
114
if (!signe(y)) return 0;
115
return equaliispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
116
}
117
118
/* x and y are integers. Return sign(|x| - |y|) */
119
int
120
abscmpii(GEN x, GEN y)
121
{
122
if (!signe(x)) return signe(y)? -1: 0;
123
if (!signe(y)) return 1;
124
return cmpiispec(x+2, y+2, lgefint(x)-2, lgefint(y)-2);
125
}
126
127
/* x and y are reals. Return sign(|x| - |y|) */
128
int
129
abscmprr(GEN x, GEN y)
130
{
131
long ex,ey,lx,ly,lz,i;
132
133
if (!signe(x)) return signe(y)? -1: 0;
134
if (!signe(y)) return 1;
135
136
ex=expo(x); ey=expo(y);
137
if (ex>ey) return 1;
138
if (ex<ey) return -1;
139
140
lx=lg(x); ly=lg(y); lz = (lx<ly)?lx:ly;
141
i=2; while (i<lz && x[i]==y[i]) i++;
142
if (i<lz) return ((ulong)x[i] > (ulong)y[i])? 1: -1;
143
if (lx>=ly)
144
{
145
while (i<lx && !x[i]) i++;
146
return (i==lx)? 0: 1;
147
}
148
while (i<ly && !y[i]) i++;
149
return (i==ly)? 0: -1;
150
}
151
152
153