passagemath-gap-pkg-float 10.8.1a4__cp311-cp311-macosx_13_0_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gap/pkg/float/COPYING +340 -0
- gap/pkg/float/PackageInfo.g +109 -0
- gap/pkg/float/README.md +76 -0
- gap/pkg/float/THANKS +1 -0
- gap/pkg/float/TODO +9 -0
- gap/pkg/float/bin/x86_64-apple-darwin24-default64-kv10/float.so +0 -0
- gap/pkg/float/build-aux/compile +348 -0
- gap/pkg/float/build-aux/config.guess~ +1748 -0
- gap/pkg/float/build-aux/config.sub~ +1884 -0
- gap/pkg/float/build-aux/depcomp +791 -0
- gap/pkg/float/build-aux/install-sh +541 -0
- gap/pkg/float/build-aux/install-sh~ +541 -0
- gap/pkg/float/build-aux/ltmain.sh +11524 -0
- gap/pkg/float/build-aux/missing +215 -0
- gap/pkg/float/config.h.in +105 -0
- gap/pkg/float/init.g +51 -0
- gap/pkg/float/lib/cxsc.gi +604 -0
- gap/pkg/float/lib/float.gd +187 -0
- gap/pkg/float/lib/fplll.gi +27 -0
- gap/pkg/float/lib/mpc.gi +243 -0
- gap/pkg/float/lib/mpfi.gi +270 -0
- gap/pkg/float/lib/mpfr.gi +328 -0
- gap/pkg/float/lib/pickle.g +131 -0
- gap/pkg/float/lib/polynomial.gi +12 -0
- gap/pkg/float/lib/pslq.gi +431 -0
- gap/pkg/float/libtool +12190 -0
- gap/pkg/float/makedoc.g +11 -0
- gap/pkg/float/read.g +46 -0
- gap/pkg/float/tst/arithmetic.tst +35 -0
- gap/pkg/float/tst/fplll.tst +19 -0
- gap/pkg/float/tst/polynomials.tst +30 -0
- gap/pkg/float/tst/testall.g +63 -0
- passagemath_gap_pkg_float/.dylibs/libfplll.9.dylib +0 -0
- passagemath_gap_pkg_float/.dylibs/libgmp.10.dylib +0 -0
- passagemath_gap_pkg_float/.dylibs/libmpc.3.dylib +0 -0
- passagemath_gap_pkg_float/.dylibs/libmpfi.0.dylib +0 -0
- passagemath_gap_pkg_float/.dylibs/libmpfr.6.dylib +0 -0
- passagemath_gap_pkg_float/__init__.py +3 -0
- passagemath_gap_pkg_float-10.8.1a4.dist-info/METADATA +92 -0
- passagemath_gap_pkg_float-10.8.1a4.dist-info/METADATA.bak +93 -0
- passagemath_gap_pkg_float-10.8.1a4.dist-info/RECORD +46 -0
- passagemath_gap_pkg_float-10.8.1a4.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_float-10.8.1a4.dist-info/top_level.txt +2 -0
- sage/all__sagemath_gap_pkg_float.py +1 -0
- sage/libs/all__sagemath_gap_pkg_float.py +1 -0
- sage/libs/gap_pkg_float.cpython-311-darwin.so +0 -0
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
#W cxsc.gi GAP library Laurent Bartholdi
|
|
4
|
+
##
|
|
5
|
+
#Y Copyright (C) 2008 Laurent Bartholdi
|
|
6
|
+
##
|
|
7
|
+
## This file deals with floats
|
|
8
|
+
##
|
|
9
|
+
|
|
10
|
+
################################################################
|
|
11
|
+
# viewers
|
|
12
|
+
################################################################
|
|
13
|
+
InstallMethod(ViewString, "cxsc:*", [IsCXSCFloat],
|
|
14
|
+
function(obj)
|
|
15
|
+
return STRING_CXSC(obj,0,FLOAT.VIEW_DIG);
|
|
16
|
+
end);
|
|
17
|
+
|
|
18
|
+
InstallOtherMethod(String, "cxsc:*,len,digits", [IsCXSCFloat,IsInt,IsInt],
|
|
19
|
+
STRING_CXSC);
|
|
20
|
+
|
|
21
|
+
InstallMethod(String, "cxsc:*, int", [IsCXSCFloat, IsInt],
|
|
22
|
+
function(obj,len)
|
|
23
|
+
return STRING_CXSC(obj,0,len);
|
|
24
|
+
end);
|
|
25
|
+
|
|
26
|
+
InstallMethod(String, "cxsc:*", [IsCXSCFloat],
|
|
27
|
+
obj->STRING_CXSC(obj,0,FLOAT.DECIMAL_DIG));
|
|
28
|
+
|
|
29
|
+
BindGlobal("CXSC_STRING", function(s)
|
|
30
|
+
if 'i' in s or 'I' in s then
|
|
31
|
+
return CP_CXSC_STRING(s);
|
|
32
|
+
elif '(' in s and '[' in s then
|
|
33
|
+
return CI_CXSC_STRING(s);
|
|
34
|
+
elif '(' in s then
|
|
35
|
+
return CP_CXSC_STRING(s);
|
|
36
|
+
elif '[' in s then
|
|
37
|
+
return RI_CXSC_STRING(s);
|
|
38
|
+
else
|
|
39
|
+
return RP_CXSC_STRING(s);
|
|
40
|
+
fi;
|
|
41
|
+
end);
|
|
42
|
+
|
|
43
|
+
InstallMethod(PrecisionFloat, "cxsc:*", [IsCXSCFloat], x->CXSC.constants.MANT_DIG);
|
|
44
|
+
|
|
45
|
+
################################################################
|
|
46
|
+
# fields
|
|
47
|
+
################################################################
|
|
48
|
+
DeclareCategory("IsCXSCPseudoField", IsFloatPseudoField);
|
|
49
|
+
|
|
50
|
+
BindGlobal("CXSC_PSEUDOFIELD",
|
|
51
|
+
Objectify(NewType(CollectionsFamily(CXSCFloatsFamily),
|
|
52
|
+
IsCXSCPseudoField and IsAttributeStoringRep),rec()));
|
|
53
|
+
SetName(CXSC_PSEUDOFIELD, FLOAT_COMPLEX_STRING);
|
|
54
|
+
|
|
55
|
+
SetIsUFDFamily(CXSCFloatsFamily,true);
|
|
56
|
+
SetZero(CXSCFloatsFamily,CXSC_INT(0));
|
|
57
|
+
SetOne(CXSCFloatsFamily,CXSC_INT(1));
|
|
58
|
+
|
|
59
|
+
SetLeftActingDomain(CXSC_PSEUDOFIELD,Rationals);
|
|
60
|
+
SetCharacteristic(CXSC_PSEUDOFIELD,0);
|
|
61
|
+
SetDimension(CXSC_PSEUDOFIELD,infinity);
|
|
62
|
+
SetSize(CXSC_PSEUDOFIELD,infinity);
|
|
63
|
+
SetIsWholeFamily(CXSC_PSEUDOFIELD,true);
|
|
64
|
+
SetZero(CXSC_PSEUDOFIELD,CXSC_INT(0));
|
|
65
|
+
SetOne(CXSC_PSEUDOFIELD,CXSC_INT(1));
|
|
66
|
+
InstallMethod( \in, [IsCXSCFloat,IsCXSCPseudoField], ReturnTrue);
|
|
67
|
+
|
|
68
|
+
################################################################
|
|
69
|
+
# constants
|
|
70
|
+
################################################################
|
|
71
|
+
InstallValue(CXSC, rec(creator := CXSC_STRING,
|
|
72
|
+
eager := 'X',
|
|
73
|
+
filter := IsCXSCFloat,
|
|
74
|
+
field := CXSC_PSEUDOFIELD,
|
|
75
|
+
reals := CXSC, # we don't distinguish the reals and complex fields here
|
|
76
|
+
constants := rec(INFINITY := CXSC_NEWCONSTANT(3),
|
|
77
|
+
NINFINITY := AINV_CXSC_RP(CXSC_NEWCONSTANT(3)),
|
|
78
|
+
MAX := CXSC_NEWCONSTANT(2),
|
|
79
|
+
NAN := CXSC_NEWCONSTANT(5),
|
|
80
|
+
DIG := 15,
|
|
81
|
+
VIEW_DIG := 6,
|
|
82
|
+
MANT_DIG := 53,
|
|
83
|
+
MAX_10_EXP := 308,
|
|
84
|
+
MAX_EXP := 1024,
|
|
85
|
+
MIN_10_EXP := -307,
|
|
86
|
+
MIN_EXP := -1021,
|
|
87
|
+
DECIMAL_DIG := 17,
|
|
88
|
+
I := CP_CXSC_RP_RP(CXSC_INT(0),CXSC_INT(1)),
|
|
89
|
+
2IPI := CP_CXSC_RP_RP(CXSC_INT(0),CXSC_NEWCONSTANT(7))
|
|
90
|
+
)));
|
|
91
|
+
|
|
92
|
+
InstallMethod(ObjByExtRep, [IsCXSCFloatFamily,IsCyclotomicCollection],
|
|
93
|
+
function(family,obj)
|
|
94
|
+
if Length(obj)=2 then
|
|
95
|
+
return OBJBYEXTREP_CXSC_RP(obj);
|
|
96
|
+
else
|
|
97
|
+
Error("Ambiguous: is ",obj," a complex or interval CXSC? Use NewFloat(...)");
|
|
98
|
+
fi;
|
|
99
|
+
end);
|
|
100
|
+
|
|
101
|
+
EAGER_FLOAT_LITERAL_CONVERTERS.X := CXSC_STRING;
|
|
102
|
+
EAGER_FLOAT_LITERAL_CONVERTERS.R := RP_CXSC_STRING;
|
|
103
|
+
EAGER_FLOAT_LITERAL_CONVERTERS.C := CP_CXSC_STRING;
|
|
104
|
+
EAGER_FLOAT_LITERAL_CONVERTERS.I := RI_CXSC_STRING;
|
|
105
|
+
EAGER_FLOAT_LITERAL_CONVERTERS.B := CI_CXSC_STRING;
|
|
106
|
+
|
|
107
|
+
################################################################
|
|
108
|
+
# unary operations
|
|
109
|
+
################################################################
|
|
110
|
+
InstallMethod(ZeroMutable,[IsCXSCReal],x->0.0_R);
|
|
111
|
+
InstallMethod(ZeroMutable,[IsCXSCComplex],x->0.0_C);
|
|
112
|
+
InstallMethod(ZeroMutable,[IsCXSCInterval],x->0.0_I);
|
|
113
|
+
InstallMethod(ZeroMutable,[IsCXSCBox],x->0.0_B);
|
|
114
|
+
InstallMethod(ZeroSameMutability,[IsCXSCReal],x->0.0_R);
|
|
115
|
+
InstallMethod(ZeroSameMutability,[IsCXSCComplex],x->0.0_C);
|
|
116
|
+
InstallMethod(ZeroSameMutability,[IsCXSCInterval],x->0.0_I);
|
|
117
|
+
InstallMethod(ZeroSameMutability,[IsCXSCBox],x->0.0_B);
|
|
118
|
+
InstallMethod(ZeroImmutable,[IsCXSCReal],x->0.0_R);
|
|
119
|
+
InstallMethod(ZeroImmutable,[IsCXSCComplex],x->0.0_C);
|
|
120
|
+
InstallMethod(ZeroImmutable,[IsCXSCInterval],x->0.0_I);
|
|
121
|
+
InstallMethod(ZeroImmutable,[IsCXSCBox],x->0.0_B);
|
|
122
|
+
|
|
123
|
+
InstallMethod(OneMutable,[IsCXSCReal],x->1.0_R);
|
|
124
|
+
InstallMethod(OneMutable,[IsCXSCComplex],x->1.0_C);
|
|
125
|
+
InstallMethod(OneMutable,[IsCXSCInterval],x->1.0_I);
|
|
126
|
+
InstallMethod(OneMutable,[IsCXSCBox],x->1.0_B);
|
|
127
|
+
InstallMethod(OneSameMutability,[IsCXSCReal],x->1.0_R);
|
|
128
|
+
InstallMethod(OneSameMutability,[IsCXSCComplex],x->1.0_C);
|
|
129
|
+
InstallMethod(OneSameMutability,[IsCXSCInterval],x->1.0_I);
|
|
130
|
+
InstallMethod(OneSameMutability,[IsCXSCBox],x->1.0_B);
|
|
131
|
+
InstallMethod(OneImmutable,[IsCXSCReal],x->1.0_R);
|
|
132
|
+
InstallMethod(OneImmutable,[IsCXSCComplex],x->1.0_C);
|
|
133
|
+
InstallMethod(OneImmutable,[IsCXSCInterval],x->1.0_I);
|
|
134
|
+
InstallMethod(OneImmutable,[IsCXSCBox],x->1.0_B);
|
|
135
|
+
|
|
136
|
+
InstallMethod(Int, [IsCXSCReal], function(x)
|
|
137
|
+
local i, w, n;
|
|
138
|
+
w := INT_CXSC(x);
|
|
139
|
+
if w=fail then
|
|
140
|
+
i := 1;
|
|
141
|
+
repeat
|
|
142
|
+
n := INT_CXSC(x/i);
|
|
143
|
+
i := 2*i;
|
|
144
|
+
until n<>fail;
|
|
145
|
+
i := i/2;
|
|
146
|
+
w := 0;
|
|
147
|
+
repeat
|
|
148
|
+
w := w+n*i;
|
|
149
|
+
x := x-n*i;
|
|
150
|
+
i := i/2;
|
|
151
|
+
n := INT_CXSC(x/i);
|
|
152
|
+
until i=1;
|
|
153
|
+
fi;
|
|
154
|
+
return w;
|
|
155
|
+
end);
|
|
156
|
+
InstallMethod(Int, [IsCXSCInterval], x->Int(Sup(x)));
|
|
157
|
+
|
|
158
|
+
CallFuncList(function(arg)
|
|
159
|
+
local i;
|
|
160
|
+
for i in arg do
|
|
161
|
+
InstallOtherMethod(VALUE_GLOBAL(i[1]), "cxsc:rp", [IsCXSCReal],
|
|
162
|
+
VALUE_GLOBAL(Concatenation(i[2],"_RP")));
|
|
163
|
+
InstallOtherMethod(VALUE_GLOBAL(i[1]), "cxsc:cp", [IsCXSCComplex],
|
|
164
|
+
VALUE_GLOBAL(Concatenation(i[2],"_CP")));
|
|
165
|
+
InstallOtherMethod(VALUE_GLOBAL(i[1]), "cxsc:ri", [IsCXSCInterval],
|
|
166
|
+
VALUE_GLOBAL(Concatenation(i[2],"_RI")));
|
|
167
|
+
InstallOtherMethod(VALUE_GLOBAL(i[1]), "cxsc:ci", [IsCXSCBox],
|
|
168
|
+
VALUE_GLOBAL(Concatenation(i[2],"_CI")));
|
|
169
|
+
od;
|
|
170
|
+
end, [["AdditiveInverseSameMutability","AINV_CXSC"],
|
|
171
|
+
["AdditiveInverseMutable","AINV_CXSC"],
|
|
172
|
+
["InverseMutable","INV_CXSC"],
|
|
173
|
+
["InverseSameMutability","INV_CXSC"],
|
|
174
|
+
["AbsoluteValue","ABS_CXSC"],
|
|
175
|
+
["Sqrt","SQRT_CXSC"],
|
|
176
|
+
["Cos","COS_CXSC"],
|
|
177
|
+
["Sin","SIN_CXSC"],
|
|
178
|
+
["Tan","TAN_CXSC"],
|
|
179
|
+
["Cot","COT_CXSC"],
|
|
180
|
+
["Asin","ASIN_CXSC"],
|
|
181
|
+
["Acos","ACOS_CXSC"],
|
|
182
|
+
["Atan","ATAN_CXSC"],
|
|
183
|
+
["Cosh","COSH_CXSC"],
|
|
184
|
+
["Sinh","SINH_CXSC"],
|
|
185
|
+
["Tanh","TANH_CXSC"],
|
|
186
|
+
["Coth","COTH_CXSC"],
|
|
187
|
+
["Asinh","ASINH_CXSC"],
|
|
188
|
+
["Acosh","ACOSH_CXSC"],
|
|
189
|
+
["Atanh","ATANH_CXSC"],
|
|
190
|
+
["Log","LOG_CXSC"],
|
|
191
|
+
["Log1p","LOG1P_CXSC"],
|
|
192
|
+
["Log2","LOG2_CXSC"],
|
|
193
|
+
["Log10","LOG10_CXSC"],
|
|
194
|
+
["Exp","EXP_CXSC"],
|
|
195
|
+
["Expm1","EXPM1_CXSC"],
|
|
196
|
+
["FrExp","FREXP_CXSC"],
|
|
197
|
+
["ExtRepOfObj","EXTREPOFOBJ_CXSC"],
|
|
198
|
+
["IsNaN","ISNAN_CXSC"],
|
|
199
|
+
["IsFinite","ISNUMBER_CXSC"],
|
|
200
|
+
["IsPInfinity","ISPINF_CXSC"],
|
|
201
|
+
["IsNInfinity","ISNINF_CXSC"],
|
|
202
|
+
["IsXInfinity","ISXINF_CXSC"],
|
|
203
|
+
["IsZero","ISZERO_CXSC"],
|
|
204
|
+
["IsOne","ISONE_CXSC"],
|
|
205
|
+
["Square","SQR_CXSC"]]);
|
|
206
|
+
|
|
207
|
+
InstallMethod(SignFloat, "cxsc:rp", [IsCXSCReal], SIGN_CXSC_RP);
|
|
208
|
+
InstallMethod(SignFloat, "cxsc:ri", [IsCXSCInterval], SIGN_CXSC_RI);
|
|
209
|
+
InstallMethod(Hypothenuse, "cxsc:rp", [IsCXSCReal,IsCXSCReal], HYPOT_CXSC_RP2);
|
|
210
|
+
|
|
211
|
+
################################################################
|
|
212
|
+
# interval stuff
|
|
213
|
+
################################################################
|
|
214
|
+
|
|
215
|
+
InstallMethod(Inf, "cxsc:ri", [IsCXSCInterval], INF_CXSC_RI);
|
|
216
|
+
InstallMethod(Sup, "cxsc:ri", [IsCXSCInterval], SUP_CXSC_RI);
|
|
217
|
+
InstallMethod(Mid, "cxsc:ri", [IsCXSCInterval], MID_CXSC_RI);
|
|
218
|
+
InstallMethod(AbsoluteDiameter, "cxsc:ri", [IsCXSCInterval], DIAM_CXSC_RI);
|
|
219
|
+
InstallMethod(RelativeDiameter, "cxsc:ri", [IsCXSCInterval], DIAM_REL_CXSC_RI);
|
|
220
|
+
InstallMethod(Inf, "cxsc:ci", [IsCXSCBox], INF_CXSC_CI);
|
|
221
|
+
InstallMethod(Sup, "cxsc:ci", [IsCXSCBox], SUP_CXSC_CI);
|
|
222
|
+
InstallMethod(Mid, "cxsc:ci", [IsCXSCBox], MID_CXSC_CI);
|
|
223
|
+
InstallMethod(AbsoluteDiameter, "cxsc:ci", [IsCXSCBox], DIAM_CXSC_CI);
|
|
224
|
+
InstallMethod(RelativeDiameter, "cxsc:ci", [IsCXSCBox], DIAM_REL_CXSC_CI);
|
|
225
|
+
|
|
226
|
+
InstallMethod(IsDisjoint, "cxsc:ri,ri", [IsCXSCInterval,IsCXSCInterval],
|
|
227
|
+
DISJOINT_CXSC_RI_RI);
|
|
228
|
+
InstallMethod(IN, "cxsc:rp,ri", [IsCXSCReal,IsCXSCInterval], SUM_FLAGS,
|
|
229
|
+
IN_CXSC_RP_RI);
|
|
230
|
+
InstallMethod(IN, "cxsc:ri,ri", [IsCXSCInterval,IsCXSCInterval], SUM_FLAGS,
|
|
231
|
+
IN_CXSC_RI_RI);
|
|
232
|
+
InstallMethod(IN, "cxsc:rp,ci", [IsCXSCReal,IsCXSCBox], SUM_FLAGS,
|
|
233
|
+
IN_CXSC_RP_CI);
|
|
234
|
+
InstallMethod(IN, "cxsc:cp,ci", [IsCXSCComplex,IsCXSCBox], SUM_FLAGS,
|
|
235
|
+
IN_CXSC_CP_CI);
|
|
236
|
+
InstallMethod(IN, "cxsc:ri,ci", [IsCXSCInterval,IsCXSCBox], SUM_FLAGS,
|
|
237
|
+
IN_CXSC_RI_CI);
|
|
238
|
+
InstallMethod(IN, "cxsc:ci,ci", [IsCXSCBox,IsCXSCBox], SUM_FLAGS,
|
|
239
|
+
IN_CXSC_CI_CI);
|
|
240
|
+
InstallMethod(IsSubset, "cxsc:ri,ri", [IsCXSCInterval,IsCXSCInterval], SUM_FLAGS,
|
|
241
|
+
IN_CXSC_RI_RI);
|
|
242
|
+
InstallMethod(IsSubset, "cxsc:ri,ci", [IsCXSCInterval,IsCXSCBox], SUM_FLAGS,
|
|
243
|
+
IN_CXSC_RI_CI);
|
|
244
|
+
InstallMethod(IsSubset, "cxsc:ci,ci", [IsCXSCBox,IsCXSCBox], SUM_FLAGS,
|
|
245
|
+
IN_CXSC_CI_CI);
|
|
246
|
+
InstallMethod(IsDisjoint, "cxsc:ci,ci", [IsCXSCBox,IsCXSCBox],
|
|
247
|
+
DISJOINT_CXSC_CI_CI);
|
|
248
|
+
InstallOtherMethod(Union2, "cxsc:ri,ri", [IsCXSCInterval,IsCXSCInterval],
|
|
249
|
+
OR_CXSC_RI_RI);
|
|
250
|
+
InstallOtherMethod(Union2, "cxsc:ri,ci", [IsCXSCInterval,IsCXSCBox],
|
|
251
|
+
OR_CXSC_RI_CI);
|
|
252
|
+
InstallOtherMethod(Union2, "cxsc:ci,ri", [IsCXSCBox,IsCXSCInterval],
|
|
253
|
+
OR_CXSC_CI_RI);
|
|
254
|
+
InstallOtherMethod(Union2, "cxsc:ci,ci", [IsCXSCBox,IsCXSCBox],
|
|
255
|
+
OR_CXSC_CI_CI);
|
|
256
|
+
InstallOtherMethod(Intersection2, "cxsc:ri,ri", [IsCXSCInterval,IsCXSCInterval],
|
|
257
|
+
AND_CXSC_RI_RI);
|
|
258
|
+
InstallOtherMethod(Intersection2, "cxsc:ri,ci", [IsCXSCInterval,IsCXSCBox],
|
|
259
|
+
AND_CXSC_RI_CI);
|
|
260
|
+
InstallOtherMethod(Intersection2, "cxsc:ci,ri", [IsCXSCBox,IsCXSCInterval],
|
|
261
|
+
AND_CXSC_CI_RI);
|
|
262
|
+
InstallOtherMethod(Intersection2, "cxsc:ci,ci", [IsCXSCBox,IsCXSCBox],
|
|
263
|
+
AND_CXSC_CI_CI);
|
|
264
|
+
|
|
265
|
+
InstallMethod(Value, [IsFloatUnivariatePolynomial, IsCXSCReal],
|
|
266
|
+
function(poly,r)
|
|
267
|
+
local v;
|
|
268
|
+
poly := CoefficientsOfUnivariatePolynomial(poly);
|
|
269
|
+
if not ForAll(poly,c->IsCXSCReal(c) or IsCXSCComplex(c)) then
|
|
270
|
+
TryNextMethod();
|
|
271
|
+
fi;
|
|
272
|
+
v := EVALPOLY_CXSC(poly,r);
|
|
273
|
+
if v=fail then TryNextMethod(); fi;
|
|
274
|
+
return v[1];
|
|
275
|
+
end);
|
|
276
|
+
|
|
277
|
+
InstallMethod(ValueInterval, [IsFloatUnivariatePolynomial, IsCXSCReal],
|
|
278
|
+
function(poly,r)
|
|
279
|
+
local v;
|
|
280
|
+
poly := CoefficientsOfUnivariatePolynomial(poly);
|
|
281
|
+
if not ForAll(poly,c->IsCXSCReal(c) or IsCXSCComplex(c)) then
|
|
282
|
+
TryNextMethod();
|
|
283
|
+
fi;
|
|
284
|
+
v := EVALPOLY_CXSC(poly,r);
|
|
285
|
+
if v=fail then TryNextMethod(); fi;
|
|
286
|
+
return v[2];
|
|
287
|
+
end);
|
|
288
|
+
|
|
289
|
+
################################################################
|
|
290
|
+
# complex stuff
|
|
291
|
+
################################################################
|
|
292
|
+
InstallMethod(RealPart, "cxsc:rp", [IsCXSCReal], x->x);
|
|
293
|
+
InstallMethod(RealPart, "cxsc:ri", [IsCXSCInterval], x->x);
|
|
294
|
+
InstallMethod(RealPart, "cxsc:cp", [IsCXSCComplex], REAL_CXSC_CP);
|
|
295
|
+
InstallMethod(RealPart, "cxsc:ci", [IsCXSCBox], REAL_CXSC_CI);
|
|
296
|
+
InstallMethod(ImaginaryPart, "cxsc:cp", [IsCXSCReal], x->0.0_R);
|
|
297
|
+
InstallMethod(ImaginaryPart, "cxsc:ci", [IsCXSCInterval], x->0.0_I);
|
|
298
|
+
InstallMethod(ImaginaryPart, "cxsc:cp", [IsCXSCComplex], IMAG_CXSC_CP);
|
|
299
|
+
InstallMethod(ImaginaryPart, "cxsc:ci", [IsCXSCBox], IMAG_CXSC_CI);
|
|
300
|
+
InstallMethod(ComplexConjugate, "cxsc:rp", [IsCXSCReal], x->x);
|
|
301
|
+
InstallMethod(ComplexConjugate, "cxsc:ri", [IsCXSCInterval], x->x);
|
|
302
|
+
InstallMethod(ComplexConjugate, "cxsc:cp", [IsCXSCComplex], CONJ_CXSC_CP);
|
|
303
|
+
InstallMethod(ComplexConjugate, "cxsc:ci", [IsCXSCBox], CONJ_CXSC_CI);
|
|
304
|
+
InstallMethod(Norm, "cxsc:rp", [IsCXSCReal], SQR_CXSC_RP);
|
|
305
|
+
InstallMethod(Norm, "cxsc:ri", [IsCXSCInterval], SQR_CXSC_RI);
|
|
306
|
+
InstallMethod(Norm, "cxsc:cp", [IsCXSCComplex], NORM_CXSC_CP);
|
|
307
|
+
InstallMethod(Norm, "cxsc:ci", [IsCXSCBox], NORM_CXSC_CI);
|
|
308
|
+
|
|
309
|
+
################################################################
|
|
310
|
+
# binary operations
|
|
311
|
+
################################################################
|
|
312
|
+
CallFuncList(function(arg)
|
|
313
|
+
local i, j;
|
|
314
|
+
for i in arg do
|
|
315
|
+
for j in Tuples([["RP",IsCXSCReal],["CP",IsCXSCComplex],["RI",IsCXSCInterval],["CI",IsCXSCBox]],2) do
|
|
316
|
+
InstallMethod(VALUE_GLOBAL(i), Concatenation("cxsc:",j[1][1],",",j[2][1]),
|
|
317
|
+
j{[1..2]}[2], VALUE_GLOBAL(Concatenation(i,"_CXSC_",j[1][1],"_",j[2][1])));
|
|
318
|
+
od;
|
|
319
|
+
CallFuncList(function(oper)
|
|
320
|
+
InstallOtherMethod(oper,"float,cyc",[IsCXSCFloatRep,IsCyc],
|
|
321
|
+
function(x,y)
|
|
322
|
+
return oper(x,MakeFloat(x,y));
|
|
323
|
+
end);
|
|
324
|
+
InstallOtherMethod(oper,"float,any",[IsCyc,IsCXSCFloatRep],
|
|
325
|
+
function(x,y)
|
|
326
|
+
return oper(MakeFloat(y,x),y);
|
|
327
|
+
end);
|
|
328
|
+
end,[VALUE_GLOBAL(i)]);
|
|
329
|
+
od;
|
|
330
|
+
end, ["SUM","DIFF","QUO","PROD","POW","EQ","LT"]);
|
|
331
|
+
|
|
332
|
+
BindGlobal("CXSC_POW_RAT", function(f,r,POWER,ROOT)
|
|
333
|
+
local d, n;
|
|
334
|
+
d := DenominatorRat(r);
|
|
335
|
+
n := NumeratorRat(r);
|
|
336
|
+
if AbsoluteValue(n)<2^28 then
|
|
337
|
+
f := POWER(f,n);
|
|
338
|
+
else
|
|
339
|
+
TryNextMethod();
|
|
340
|
+
fi;
|
|
341
|
+
if d<2^28 then
|
|
342
|
+
f := ROOT(f,d);
|
|
343
|
+
else
|
|
344
|
+
TryNextMethod();
|
|
345
|
+
fi;
|
|
346
|
+
return f;
|
|
347
|
+
end);
|
|
348
|
+
|
|
349
|
+
InstallMethod(\^, "cxsc:, rat", [IsCXSCReal, IsRat],
|
|
350
|
+
function(f,r)
|
|
351
|
+
return CXSC_POW_RAT(f,r,POWER_CXSC_RP,ROOT_CXSC_RP);
|
|
352
|
+
end);
|
|
353
|
+
InstallMethod(\^, "cxsc:, rat", [IsCXSCComplex, IsRat],
|
|
354
|
+
function(f,r)
|
|
355
|
+
return CXSC_POW_RAT(f,r,POWER_CXSC_CP,ROOT_CXSC_CP);
|
|
356
|
+
end);
|
|
357
|
+
InstallMethod(\^, "cxsc:, rat", [IsCXSCInterval, IsRat],
|
|
358
|
+
function(f,r)
|
|
359
|
+
return CXSC_POW_RAT(f,r,POWER_CXSC_RI,ROOT_CXSC_RI);
|
|
360
|
+
end);
|
|
361
|
+
InstallMethod(\^, "cxsc:, rat", [IsCXSCBox, IsRat],
|
|
362
|
+
function(f,r)
|
|
363
|
+
return CXSC_POW_RAT(f,r,POWER_CXSC_CI,ROOT_CXSC_CI);
|
|
364
|
+
end);
|
|
365
|
+
|
|
366
|
+
InstallMethod(Atan2, "cxsc:rp,rp", [IsCXSCReal,IsCXSCReal], ATAN2_CXSC_RP_RP);
|
|
367
|
+
InstallOtherMethod(Atan2, "cxsc:cp", [IsCXSCComplex], ATAN2_CXSC_CP);
|
|
368
|
+
InstallOtherMethod(Atan2, "cxsc:ci", [IsCXSCBox], ATAN2_CXSC_CI);
|
|
369
|
+
|
|
370
|
+
InstallMethod(LdExp, "cxsc:rp, int", [IsCXSCReal, IsInt], LDEXP_CXSC_RP);
|
|
371
|
+
InstallMethod(LdExp, "cxsc:ri, int", [IsCXSCInterval, IsInt], LDEXP_CXSC_RI);
|
|
372
|
+
InstallMethod(LdExp, "cxsc:cp, int", [IsCXSCComplex, IsInt], LDEXP_CXSC_CP);
|
|
373
|
+
InstallMethod(LdExp, "cxsc:ci, int", [IsCXSCBox, IsInt], LDEXP_CXSC_CI);
|
|
374
|
+
|
|
375
|
+
################################################################
|
|
376
|
+
# roots
|
|
377
|
+
################################################################
|
|
378
|
+
InstallMethod(RootsFloatOp, "cxsc: list, cxsc:ci", [IsList,IsCXSCFloat],
|
|
379
|
+
function(p,filter)
|
|
380
|
+
return ROOTPOLY_CXSC(p,false);
|
|
381
|
+
end);
|
|
382
|
+
|
|
383
|
+
################################################################
|
|
384
|
+
# default constructors
|
|
385
|
+
################################################################
|
|
386
|
+
INSTALLFLOATCREATOR("for lists", [IsCXSCFloat,IsList],
|
|
387
|
+
function(filter,list)
|
|
388
|
+
return OBJBYEXTREP_CXSC_RP(list);
|
|
389
|
+
end);
|
|
390
|
+
|
|
391
|
+
INSTALLFLOATCREATOR("for integers", [IsCXSCFloat,IsInt],
|
|
392
|
+
function(filter,int)
|
|
393
|
+
local f, m;
|
|
394
|
+
f := 0.0_R;
|
|
395
|
+
m := 1.0_R;
|
|
396
|
+
while int <> 0 do
|
|
397
|
+
f := f + m*CXSC_INT(RemInt(int,2^27));
|
|
398
|
+
int := QuoInt(int,2^27);
|
|
399
|
+
m := LdExp(m,27);
|
|
400
|
+
od;
|
|
401
|
+
return f;
|
|
402
|
+
end);
|
|
403
|
+
|
|
404
|
+
INSTALLFLOATCREATOR("for strings", [IsCXSCFloat,IsString],
|
|
405
|
+
function(filter,s)
|
|
406
|
+
if 'i' in s or 'I' in s then
|
|
407
|
+
return CP_CXSC_STRING(s);
|
|
408
|
+
else
|
|
409
|
+
return RP_CXSC_STRING(s);
|
|
410
|
+
fi;
|
|
411
|
+
end);
|
|
412
|
+
|
|
413
|
+
INSTALLFLOATCREATOR("for strings", [IsCXSCReal,IsFloat],
|
|
414
|
+
function(filter,s)
|
|
415
|
+
return RP_CXSC_STRING(s);
|
|
416
|
+
end);
|
|
417
|
+
|
|
418
|
+
INSTALLFLOATCREATOR("for cxsc:rp", [IsCXSCReal,IsIEEE754FloatRep],
|
|
419
|
+
function(filter,x)
|
|
420
|
+
return CXSC_IEEE754(x);
|
|
421
|
+
end);
|
|
422
|
+
|
|
423
|
+
################################################################
|
|
424
|
+
# real constructors
|
|
425
|
+
################################################################
|
|
426
|
+
INSTALLFLOATCREATOR("for lists", [IsCXSCReal,IsList],
|
|
427
|
+
function(filter,list)
|
|
428
|
+
return OBJBYEXTREP_CXSC_RP(list);
|
|
429
|
+
end);
|
|
430
|
+
|
|
431
|
+
INSTALLFLOATCREATOR("for integers", [IsCXSCReal,IsInt],
|
|
432
|
+
function(filter,int)
|
|
433
|
+
local f, m;
|
|
434
|
+
f := 0.0_R;
|
|
435
|
+
m := 1.0_R;
|
|
436
|
+
while int <> 0 do
|
|
437
|
+
f := f + m*CXSC_INT(RemInt(int,2^27));
|
|
438
|
+
int := QuoInt(int,2^27);
|
|
439
|
+
m := LdExp(m,27);
|
|
440
|
+
od;
|
|
441
|
+
return f;
|
|
442
|
+
end);
|
|
443
|
+
|
|
444
|
+
INSTALLFLOATCREATOR("for strings", [IsCXSCReal,IsString],
|
|
445
|
+
function(filter,s)
|
|
446
|
+
return RP_CXSC_STRING(s);
|
|
447
|
+
end);
|
|
448
|
+
|
|
449
|
+
INSTALLFLOATCREATOR("for cxsc:rp", [IsCXSCReal,IsCXSCReal],
|
|
450
|
+
function(filter,x)
|
|
451
|
+
return x;
|
|
452
|
+
end);
|
|
453
|
+
|
|
454
|
+
INSTALLFLOATCONSTRUCTORS(rec(filter:=IsCXSCReal, constants := CXSC.constants));
|
|
455
|
+
|
|
456
|
+
################################################################
|
|
457
|
+
# complex constructors
|
|
458
|
+
################################################################
|
|
459
|
+
INSTALLFLOATCREATOR("for lists", [IsCXSCComplex,IsList],
|
|
460
|
+
function(filter,list)
|
|
461
|
+
return OBJBYEXTREP_CXSC_CP(list);
|
|
462
|
+
end);
|
|
463
|
+
|
|
464
|
+
INSTALLFLOATCREATOR("for ints", [IsCXSCComplex,IsInt],
|
|
465
|
+
function(filter,x)
|
|
466
|
+
return CP_CXSC_RP(NewFloat(IsCXSCReal,x));
|
|
467
|
+
end);
|
|
468
|
+
|
|
469
|
+
DECLAREFLOATCREATOR(IsCXSCComplex,IsCXSCReal,IsCXSCReal);
|
|
470
|
+
INSTALLFLOATCREATOR("for two reals", [IsCXSCComplex,IsCXSCReal,IsCXSCReal],
|
|
471
|
+
function(filter,x,y)
|
|
472
|
+
return CP_CXSC_RP_RP(x,y);
|
|
473
|
+
end);
|
|
474
|
+
|
|
475
|
+
DECLAREFLOATCREATOR(IsCXSCComplex,IsInt,IsInt);
|
|
476
|
+
INSTALLFLOATCREATOR("for two ints", [IsCXSCComplex,IsInt,IsInt],
|
|
477
|
+
function(filter,x,y)
|
|
478
|
+
return CP_CXSC_RP_RP(NewFloat(IsCXSCReal,x),NewFloat(IsCXSCReal,y));
|
|
479
|
+
end);
|
|
480
|
+
|
|
481
|
+
INSTALLFLOATCREATOR("for strings", [IsCXSCComplex,IsString],
|
|
482
|
+
function(filter,s)
|
|
483
|
+
return CP_CXSC_STRING(s);
|
|
484
|
+
end);
|
|
485
|
+
|
|
486
|
+
INSTALLFLOATCREATOR("for a real", [IsCXSCComplex,IsCXSCReal],
|
|
487
|
+
function(filter,x)
|
|
488
|
+
return CP_CXSC_RP(x);
|
|
489
|
+
end);
|
|
490
|
+
|
|
491
|
+
INSTALLFLOATCREATOR("for a complex", [IsCXSCComplex,IsCXSCComplex],
|
|
492
|
+
function(filter,x)
|
|
493
|
+
return x;
|
|
494
|
+
end);
|
|
495
|
+
|
|
496
|
+
INSTALLFLOATCONSTRUCTORS(rec(filter:=IsCXSCComplex));
|
|
497
|
+
|
|
498
|
+
################################################################
|
|
499
|
+
# interval constructors
|
|
500
|
+
################################################################
|
|
501
|
+
INSTALLFLOATCREATOR("for lists", [IsCXSCInterval,IsList],
|
|
502
|
+
function(filter,list)
|
|
503
|
+
return OBJBYEXTREP_CXSC_RI(list);
|
|
504
|
+
end);
|
|
505
|
+
|
|
506
|
+
INSTALLFLOATCREATOR("for ints", [IsCXSCInterval,IsInt],
|
|
507
|
+
function(filter,x)
|
|
508
|
+
return RI_CXSC_RP(NewFloat(IsCXSCReal,x));
|
|
509
|
+
end);
|
|
510
|
+
|
|
511
|
+
DECLAREFLOATCREATOR(IsCXSCInterval,IsCXSCReal,IsCXSCReal);
|
|
512
|
+
INSTALLFLOATCREATOR("for two reals", [IsCXSCInterval,IsCXSCReal,IsCXSCReal],
|
|
513
|
+
function(filter,x,y)
|
|
514
|
+
return RI_CXSC_RP_RP(x,y);
|
|
515
|
+
end);
|
|
516
|
+
|
|
517
|
+
DECLAREFLOATCREATOR(IsCXSCInterval,IsInt,IsInt);
|
|
518
|
+
INSTALLFLOATCREATOR("for two integers", [IsCXSCInterval,IsInt,IsInt],
|
|
519
|
+
function(filter,x,y)
|
|
520
|
+
return RI_CXSC_RP_RP(NewFloat(IsCXSCReal,x),NewFloat(IsCXSCReal,y));
|
|
521
|
+
end);
|
|
522
|
+
|
|
523
|
+
INSTALLFLOATCREATOR("for strings", [IsCXSCInterval,IsString],
|
|
524
|
+
function(filter,s)
|
|
525
|
+
return RI_CXSC_STRING(s);
|
|
526
|
+
end);
|
|
527
|
+
|
|
528
|
+
INSTALLFLOATCREATOR("for a real", [IsCXSCInterval,IsCXSCReal],
|
|
529
|
+
function(filter,x)
|
|
530
|
+
return RI_CXSC_RP(x);
|
|
531
|
+
end);
|
|
532
|
+
|
|
533
|
+
INSTALLFLOATCREATOR("for an interval", [IsCXSCInterval,IsCXSCInterval],
|
|
534
|
+
function(filter,x)
|
|
535
|
+
return x;
|
|
536
|
+
end);
|
|
537
|
+
|
|
538
|
+
INSTALLFLOATCONSTRUCTORS(rec(filter:=IsCXSCInterval));
|
|
539
|
+
|
|
540
|
+
################################################################
|
|
541
|
+
# complex interval constructors
|
|
542
|
+
################################################################
|
|
543
|
+
INSTALLFLOATCREATOR("for lists", [IsCXSCBox,IsList],
|
|
544
|
+
function(filter,list)
|
|
545
|
+
return OBJBYEXTREP_CXSC_CP(list);
|
|
546
|
+
end);
|
|
547
|
+
|
|
548
|
+
INSTALLFLOATCREATOR("for ints", [IsCXSCBox,IsInt],
|
|
549
|
+
function(filter,x)
|
|
550
|
+
return CI_CXSC_RI_RI(NewFloat(IsCXSCInterval,x),0.0_I);
|
|
551
|
+
end);
|
|
552
|
+
|
|
553
|
+
DeclareConstructor("NewFloat", [IsCXSCBox,IsCXSCReal,IsCXSCReal]);
|
|
554
|
+
DeclareOperation("MakeFloat", [IsCXSCBox,IsCXSCReal,IsCXSCReal]);
|
|
555
|
+
DeclareConstructor("NewFloat", [IsCXSCBox,IsCXSCComplex,IsCXSCComplex]);
|
|
556
|
+
DeclareOperation("MakeFloat", [IsCXSCBox,IsCXSCComplex,IsCXSCComplex]);
|
|
557
|
+
DeclareConstructor("NewFloat", [IsCXSCBox,IsCXSCInterval,IsCXSCInterval]);
|
|
558
|
+
DeclareOperation("MakeFloat", [IsCXSCBox,IsCXSCInterval,IsCXSCInterval]);
|
|
559
|
+
|
|
560
|
+
INSTALLFLOATCREATOR("for two reals", [IsCXSCBox,IsCXSCReal,IsCXSCReal],
|
|
561
|
+
function(filter,x,y)
|
|
562
|
+
return CI_CXSC_CP(CP_CXSC_RP_RP(x,y));
|
|
563
|
+
end);
|
|
564
|
+
|
|
565
|
+
INSTALLFLOATCREATOR("for two complexes", [IsCXSCBox,IsCXSCComplex,IsCXSCComplex],
|
|
566
|
+
function(filter,x,y)
|
|
567
|
+
return CI_CXSC_CP_CP(x,y);
|
|
568
|
+
end);
|
|
569
|
+
|
|
570
|
+
INSTALLFLOATCREATOR("for two intervals", [IsCXSCBox,IsCXSCInterval,IsCXSCInterval],
|
|
571
|
+
function(filter,x,y)
|
|
572
|
+
return CI_CXSC_RI_RI(x,y);
|
|
573
|
+
end);
|
|
574
|
+
|
|
575
|
+
INSTALLFLOATCREATOR("for strings", [IsCXSCBox,IsString],
|
|
576
|
+
function(filter,s)
|
|
577
|
+
return CI_CXSC_STRING(s);
|
|
578
|
+
end);
|
|
579
|
+
|
|
580
|
+
INSTALLFLOATCREATOR("for a real", [IsCXSCBox,IsCXSCReal],
|
|
581
|
+
function(filter,x)
|
|
582
|
+
return CI_CXSC_CP(CP_CXSC_RP(x));
|
|
583
|
+
end);
|
|
584
|
+
|
|
585
|
+
INSTALLFLOATCREATOR("for a complex", [IsCXSCBox,IsCXSCComplex],
|
|
586
|
+
function(filter,x)
|
|
587
|
+
return CI_CXSC_CP(x);
|
|
588
|
+
end);
|
|
589
|
+
|
|
590
|
+
INSTALLFLOATCREATOR("for an interval", [IsCXSCBox,IsCXSCInterval],
|
|
591
|
+
function(filter,x)
|
|
592
|
+
return CI_CXSC_RI_RI(x,0.0_I);
|
|
593
|
+
end);
|
|
594
|
+
|
|
595
|
+
INSTALLFLOATCREATOR("for a box", [IsCXSCBox,IsCXSCBox],
|
|
596
|
+
function(filter,x)
|
|
597
|
+
return x;
|
|
598
|
+
end);
|
|
599
|
+
|
|
600
|
+
INSTALLFLOATCONSTRUCTORS(rec(filter:=IsCXSCBox));
|
|
601
|
+
|
|
602
|
+
#############################################################################
|
|
603
|
+
##
|
|
604
|
+
#E
|