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.
Files changed (46) hide show
  1. gap/pkg/float/COPYING +340 -0
  2. gap/pkg/float/PackageInfo.g +109 -0
  3. gap/pkg/float/README.md +76 -0
  4. gap/pkg/float/THANKS +1 -0
  5. gap/pkg/float/TODO +9 -0
  6. gap/pkg/float/bin/x86_64-apple-darwin24-default64-kv10/float.so +0 -0
  7. gap/pkg/float/build-aux/compile +348 -0
  8. gap/pkg/float/build-aux/config.guess~ +1748 -0
  9. gap/pkg/float/build-aux/config.sub~ +1884 -0
  10. gap/pkg/float/build-aux/depcomp +791 -0
  11. gap/pkg/float/build-aux/install-sh +541 -0
  12. gap/pkg/float/build-aux/install-sh~ +541 -0
  13. gap/pkg/float/build-aux/ltmain.sh +11524 -0
  14. gap/pkg/float/build-aux/missing +215 -0
  15. gap/pkg/float/config.h.in +105 -0
  16. gap/pkg/float/init.g +51 -0
  17. gap/pkg/float/lib/cxsc.gi +604 -0
  18. gap/pkg/float/lib/float.gd +187 -0
  19. gap/pkg/float/lib/fplll.gi +27 -0
  20. gap/pkg/float/lib/mpc.gi +243 -0
  21. gap/pkg/float/lib/mpfi.gi +270 -0
  22. gap/pkg/float/lib/mpfr.gi +328 -0
  23. gap/pkg/float/lib/pickle.g +131 -0
  24. gap/pkg/float/lib/polynomial.gi +12 -0
  25. gap/pkg/float/lib/pslq.gi +431 -0
  26. gap/pkg/float/libtool +12190 -0
  27. gap/pkg/float/makedoc.g +11 -0
  28. gap/pkg/float/read.g +46 -0
  29. gap/pkg/float/tst/arithmetic.tst +35 -0
  30. gap/pkg/float/tst/fplll.tst +19 -0
  31. gap/pkg/float/tst/polynomials.tst +30 -0
  32. gap/pkg/float/tst/testall.g +63 -0
  33. passagemath_gap_pkg_float/.dylibs/libfplll.9.dylib +0 -0
  34. passagemath_gap_pkg_float/.dylibs/libgmp.10.dylib +0 -0
  35. passagemath_gap_pkg_float/.dylibs/libmpc.3.dylib +0 -0
  36. passagemath_gap_pkg_float/.dylibs/libmpfi.0.dylib +0 -0
  37. passagemath_gap_pkg_float/.dylibs/libmpfr.6.dylib +0 -0
  38. passagemath_gap_pkg_float/__init__.py +3 -0
  39. passagemath_gap_pkg_float-10.8.1a4.dist-info/METADATA +92 -0
  40. passagemath_gap_pkg_float-10.8.1a4.dist-info/METADATA.bak +93 -0
  41. passagemath_gap_pkg_float-10.8.1a4.dist-info/RECORD +46 -0
  42. passagemath_gap_pkg_float-10.8.1a4.dist-info/WHEEL +6 -0
  43. passagemath_gap_pkg_float-10.8.1a4.dist-info/top_level.txt +2 -0
  44. sage/all__sagemath_gap_pkg_float.py +1 -0
  45. sage/libs/all__sagemath_gap_pkg_float.py +1 -0
  46. 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