]> www.ginac.de Git - cln.git/blobdiff - src/numtheory/cl_nt_jacobi_low.cc
Get rid CL_REQUIRE/CL_PROVIDE(cl_F_epspos), it is not really necessary.
[cln.git] / src / numtheory / cl_nt_jacobi_low.cc
index 00368a20feabf206cbc6e8bd2aff4496d0668015..7b706a229a2e9aaa142c0b546cc1443e528a74b4 100644 (file)
@@ -4,16 +4,18 @@
 #include "cl_sysdep.h"
 
 // Specification.
-#include "cl_numtheory.h"
+#include "cln/numtheory.h"
 
 
 // Implementation.
 
-#include "cl_abort.h"
+#include "cln/exception.h"
 #include "cl_xmacros.h"
 
+namespace cln {
+
 // Assume 0 <= a < b.
-inline int jacobi_aux (uint32 a, uint32 b)
+inline int jacobi_aux (uintV a, uintV b)
 {
        var int v = 1;
        for (;;) {
@@ -31,7 +33,7 @@ inline int jacobi_aux (uint32 a, uint32 b)
                        switch (b % 4) {
                                case 1: break;
                                case 3: v = -v; break;
-                               default: cl_abort();
+                               default: throw runtime_exception();
                        }
                        continue;
                }
@@ -42,7 +44,7 @@ inline int jacobi_aux (uint32 a, uint32 b)
                        switch (b % 8) {
                                case 1: case 7: break;
                                case 3: case 5: v = -v; break;
-                               default: cl_abort();
+                               default: throw runtime_exception();
                        }
                        continue;
                }
@@ -50,7 +52,7 @@ inline int jacobi_aux (uint32 a, uint32 b)
                // law  (a/b) = (-1)^((a-1)/2)((b-1)/2) * (b/a).
                if ((a & b & 3) == 3)
                        v = -v;
-               swap(sint32, a,b);
+               swap(uintV, a,b);
                // Now a > 2*b, set a := a mod b.
                if ((a >> 3) >= b)
                        a = a % b;
@@ -59,17 +61,19 @@ inline int jacobi_aux (uint32 a, uint32 b)
        }
 }
 
-int jacobi (sint32 a, sint32 b)
+int jacobi (sintV a, sintV b)
 {
        // Check b > 0, b odd.
        if (!(b > 0))
-               cl_abort();
+               throw runtime_exception();
        if ((b & 1) == 0)
-               cl_abort();
+               throw runtime_exception();
        // Ensure 0 <= a < b.
        if (a >= 0)
-               a = (uint32)a % (uint32)b;
+               a = (uintV)a % (uintV)b;
        else
-               a = b-1-((uint32)(~a) % (uint32)b);
+               a = b-1-((uintV)(~a) % (uintV)b);
        return jacobi_aux(a,b);
 }
+
+}  // namespace cln