mirror of
https://src.fedoraproject.org/rpms/sagemath.git
synced 2025-04-22 19:55:54 -04:00
More adaptations to NTL 9.3.
This commit is contained in:
parent
7c9edb5212
commit
fa822a3b47
1 changed files with 23 additions and 23 deletions
|
@ -44,13 +44,13 @@
|
||||||
|
|
||||||
/* This is called once for every single module that links in stdsage */
|
/* This is called once for every single module that links in stdsage */
|
||||||
--- ./src/sage/rings/bernmm/bernmm-test.cpp.orig 2015-02-16 17:15:12.000000000 -0700
|
--- ./src/sage/rings/bernmm/bernmm-test.cpp.orig 2015-02-16 17:15:12.000000000 -0700
|
||||||
+++ ./src/sage/rings/bernmm/bernmm-test.cpp 2015-05-07 21:39:58.565251320 -0600
|
+++ ./src/sage/rings/bernmm/bernmm-test.cpp 2015-09-26 09:19:00.830399741 -0600
|
||||||
@@ -70,7 +70,7 @@ void bern_naive(mpq_t* res, long n)
|
@@ -70,7 +70,7 @@ void bern_naive(mpq_t* res, long n)
|
||||||
*/
|
*/
|
||||||
int testcase__bern_modp_powg(long p, long k, mpq_t b)
|
int testcase__bern_modp_powg(long p, long k, mpq_t b)
|
||||||
{
|
{
|
||||||
- double pinv = 1 / ((double) p);
|
- double pinv = 1 / ((double) p);
|
||||||
+ wide_double pinv = wide_double(1) / wide_double(p);
|
+ mulmod_t pinv = PrepMulMod(p);
|
||||||
|
|
||||||
// compute B_k mod p using _bern_modp_powg()
|
// compute B_k mod p using _bern_modp_powg()
|
||||||
long x = _bern_modp_powg(p, pinv, k);
|
long x = _bern_modp_powg(p, pinv, k);
|
||||||
|
@ -59,18 +59,18 @@
|
||||||
int testcase__bern_modp_pow2(long p, long k)
|
int testcase__bern_modp_pow2(long p, long k)
|
||||||
{
|
{
|
||||||
- double pinv = 1 / ((double) p);
|
- double pinv = 1 / ((double) p);
|
||||||
+ wide_double pinv = wide_double(1) / wide_double(p);
|
+ mulmod_t pinv = PrepMulMod(p);
|
||||||
|
|
||||||
if (PowerMod(2, k, p, pinv) == 1)
|
if (PowerMod(2, k, p, pinv) == 1)
|
||||||
return 1;
|
return 1;
|
||||||
--- ./src/sage/rings/bernmm/bern_modp.cpp.orig 2015-02-16 17:15:12.000000000 -0700
|
--- ./src/sage/rings/bernmm/bern_modp.cpp.orig 2015-02-16 17:15:12.000000000 -0700
|
||||||
+++ ./src/sage/rings/bernmm/bern_modp.cpp 2015-05-07 20:17:37.680381004 -0600
|
+++ ./src/sage/rings/bernmm/bern_modp.cpp 2015-09-26 14:15:34.862360481 -0600
|
||||||
@@ -43,14 +43,14 @@ namespace bernmm {
|
@@ -43,14 +43,14 @@ namespace bernmm {
|
||||||
pinv = 1 / ((double) p)
|
pinv = 1 / ((double) p)
|
||||||
g = a multiplicative generator of GF(p), in [0, p)
|
g = a multiplicative generator of GF(p), in [0, p)
|
||||||
*/
|
*/
|
||||||
-long bernsum_powg(long p, double pinv, long k, long g)
|
-long bernsum_powg(long p, double pinv, long k, long g)
|
||||||
+long bernsum_powg(long p, wide_double pinv, long k, long g)
|
+long bernsum_powg(long p, mulmod_t pinv, long k, long g)
|
||||||
{
|
{
|
||||||
long half_gm1 = (g + ((g & 1) ? 0 : p) - 1) / 2; // (g-1)/2 mod p
|
long half_gm1 = (g + ((g & 1) ? 0 : p) - 1) / 2; // (g-1)/2 mod p
|
||||||
long g_to_jm1 = 1;
|
long g_to_jm1 = 1;
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
long g_to_km1_to_j = g_to_km1;
|
long g_to_km1_to_j = g_to_km1;
|
||||||
long sum = 0;
|
long sum = 0;
|
||||||
- double g_pinv = ((double) g) / ((double) p);
|
- double g_pinv = ((double) g) / ((double) p);
|
||||||
+ wide_double g_pinv = wide_double(g) / wide_double(p);
|
+ muldivrem_t g_pinv = PrepMulDivRem(g, p);
|
||||||
mulmod_precon_t g_to_km1_pinv = PrepMulModPrecon(g_to_km1, p, pinv);
|
mulmod_precon_t g_to_km1_pinv = PrepMulModPrecon(g_to_km1, p, pinv);
|
||||||
|
|
||||||
for (long j = 1; j <= (p-1)/2; j++)
|
for (long j = 1; j <= (p-1)/2; j++)
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
-long bernsum_pow2(long p, double pinv, long k, long g, long n)
|
-long bernsum_pow2(long p, double pinv, long k, long g, long n)
|
||||||
+long bernsum_pow2(long p, wide_double pinv, long k, long g, long n)
|
+long bernsum_pow2(long p, mulmod_t pinv, long k, long g, long n)
|
||||||
{
|
{
|
||||||
// In the main summation loop we accumulate data into the _tables_ array;
|
// In the main summation loop we accumulate data into the _tables_ array;
|
||||||
// tables[y][z] contributes to the final answer with a weight of
|
// tables[y][z] contributes to the final answer with a weight of
|
||||||
|
@ -96,7 +96,7 @@
|
||||||
something is different from bernsum_pow2())
|
something is different from bernsum_pow2())
|
||||||
*/
|
*/
|
||||||
-long bernsum_pow2_redc(long p, double pinv, long k, long g, long n)
|
-long bernsum_pow2_redc(long p, double pinv, long k, long g, long n)
|
||||||
+long bernsum_pow2_redc(long p, wide_double pinv, long k, long g, long n)
|
+long bernsum_pow2_redc(long p, mulmod_t pinv, long k, long g, long n)
|
||||||
{
|
{
|
||||||
long pinv2 = PrepRedc(p);
|
long pinv2 = PrepRedc(p);
|
||||||
long F = (1L << (ULONG_BITS/2)) % p;
|
long F = (1L << (ULONG_BITS/2)) % p;
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
Algorithm: uses bernsum_powg() to compute the main sum.
|
Algorithm: uses bernsum_powg() to compute the main sum.
|
||||||
*/
|
*/
|
||||||
-long _bern_modp_powg(long p, double pinv, long k)
|
-long _bern_modp_powg(long p, double pinv, long k)
|
||||||
+long _bern_modp_powg(long p, wide_double pinv, long k)
|
+long _bern_modp_powg(long p, mulmod_t pinv, long k)
|
||||||
{
|
{
|
||||||
Factorisation F(p-1);
|
Factorisation F(p-1);
|
||||||
long g = primitive_root(p, pinv, F);
|
long g = primitive_root(p, pinv, F);
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
enough) to compute the main sum.
|
enough) to compute the main sum.
|
||||||
*/
|
*/
|
||||||
-long _bern_modp_pow2(long p, double pinv, long k)
|
-long _bern_modp_pow2(long p, double pinv, long k)
|
||||||
+long _bern_modp_pow2(long p, wide_double pinv, long k)
|
+long _bern_modp_pow2(long p, mulmod_t pinv, long k)
|
||||||
{
|
{
|
||||||
Factorisation F(p-1);
|
Factorisation F(p-1);
|
||||||
long g = primitive_root(p, pinv, F);
|
long g = primitive_root(p, pinv, F);
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
pinv = 1 / ((double) p)
|
pinv = 1 / ((double) p)
|
||||||
*/
|
*/
|
||||||
-long _bern_modp(long p, double pinv, long k)
|
-long _bern_modp(long p, double pinv, long k)
|
||||||
+long _bern_modp(long p, wide_double pinv, long k)
|
+long _bern_modp(long p, mulmod_t pinv, long k)
|
||||||
{
|
{
|
||||||
if (PowerMod(2, k, p, pinv) != 1)
|
if (PowerMod(2, k, p, pinv) != 1)
|
||||||
// 2^k != 1 mod p, so we use the faster version
|
// 2^k != 1 mod p, so we use the faster version
|
||||||
|
@ -132,12 +132,12 @@
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
- double pinv = 1 / ((double) p);
|
- double pinv = 1 / ((double) p);
|
||||||
+ wide_double pinv = wide_double(1) / wide_double (p);
|
+ mulmod_t pinv = PrepMulMod(p);
|
||||||
long x = _bern_modp(p, pinv, m); // = B_m/m mod p
|
long x = _bern_modp(p, pinv, m); // = B_m/m mod p
|
||||||
return MulMod(x, k, p, pinv);
|
return MulMod(x, k, p, pinv);
|
||||||
}
|
}
|
||||||
--- ./src/sage/rings/bernmm/bern_modp.h.orig 2015-02-16 17:15:12.000000000 -0700
|
--- ./src/sage/rings/bernmm/bern_modp.h.orig 2015-02-16 17:15:12.000000000 -0700
|
||||||
+++ ./src/sage/rings/bernmm/bern_modp.h 2015-05-09 08:06:39.732529882 -0600
|
+++ ./src/sage/rings/bernmm/bern_modp.h 2015-09-26 09:19:28.365229754 -0600
|
||||||
@@ -12,6 +12,7 @@
|
@@ -12,6 +12,7 @@
|
||||||
#ifndef BERNMM_BERN_MODP_H
|
#ifndef BERNMM_BERN_MODP_H
|
||||||
#define BERNMM_BERN_MODP_H
|
#define BERNMM_BERN_MODP_H
|
||||||
|
@ -152,19 +152,19 @@
|
||||||
*/
|
*/
|
||||||
-long _bern_modp_powg(long p, double pinv, long k);
|
-long _bern_modp_powg(long p, double pinv, long k);
|
||||||
-long _bern_modp_pow2(long p, double pinv, long k);
|
-long _bern_modp_pow2(long p, double pinv, long k);
|
||||||
+long _bern_modp_powg(long p, NTL::wide_double pinv, long k);
|
+long _bern_modp_powg(long p, NTL::mulmod_t pinv, long k);
|
||||||
+long _bern_modp_pow2(long p, NTL::wide_double pinv, long k);
|
+long _bern_modp_pow2(long p, NTL::mulmod_t pinv, long k);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
--- ./src/sage/rings/bernmm/bern_modp_util.cpp.orig 2015-02-16 17:15:12.000000000 -0700
|
--- ./src/sage/rings/bernmm/bern_modp_util.cpp.orig 2015-02-16 17:15:12.000000000 -0700
|
||||||
+++ ./src/sage/rings/bernmm/bern_modp_util.cpp 2015-05-07 21:38:06.662182003 -0600
|
+++ ./src/sage/rings/bernmm/bern_modp_util.cpp 2015-09-26 09:19:57.474935651 -0600
|
||||||
@@ -20,7 +20,7 @@ NTL_CLIENT;
|
@@ -20,7 +20,7 @@ NTL_CLIENT;
|
||||||
namespace bernmm {
|
namespace bernmm {
|
||||||
|
|
||||||
|
|
||||||
-long PowerMod(long a, long ee, long n, double ninv)
|
-long PowerMod(long a, long ee, long n, double ninv)
|
||||||
+long PowerMod(long a, long ee, long n, wide_double ninv)
|
+long PowerMod(long a, long ee, long n, mulmod_t ninv)
|
||||||
{
|
{
|
||||||
long x, y;
|
long x, y;
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
|
|
||||||
|
|
||||||
-long order(long x, long p, double pinv, const Factorisation& F)
|
-long order(long x, long p, double pinv, const Factorisation& F)
|
||||||
+long order(long x, long p, wide_double pinv, const Factorisation& F)
|
+long order(long x, long p, mulmod_t pinv, const Factorisation& F)
|
||||||
{
|
{
|
||||||
// in the loop below, m is always some multiple of the order of x
|
// in the loop below, m is always some multiple of the order of x
|
||||||
long m = p - 1;
|
long m = p - 1;
|
||||||
|
@ -182,12 +182,12 @@
|
||||||
|
|
||||||
|
|
||||||
-long primitive_root(long p, double pinv, const Factorisation& F)
|
-long primitive_root(long p, double pinv, const Factorisation& F)
|
||||||
+long primitive_root(long p, wide_double pinv, const Factorisation& F)
|
+long primitive_root(long p, mulmod_t pinv, const Factorisation& F)
|
||||||
{
|
{
|
||||||
if (p == 2)
|
if (p == 2)
|
||||||
return 1;
|
return 1;
|
||||||
--- ./src/sage/rings/bernmm/bern_modp_util.h.orig 2015-02-16 17:15:12.000000000 -0700
|
--- ./src/sage/rings/bernmm/bern_modp_util.h.orig 2015-02-16 17:15:12.000000000 -0700
|
||||||
+++ ./src/sage/rings/bernmm/bern_modp_util.h 2015-05-09 08:58:22.618458475 -0600
|
+++ ./src/sage/rings/bernmm/bern_modp_util.h 2015-09-26 09:20:26.423623021 -0600
|
||||||
@@ -17,6 +17,7 @@
|
@@ -17,6 +17,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
@ -201,7 +201,7 @@
|
||||||
(Implementation is adapted from ZZ.c in NTL 5.4.1.)
|
(Implementation is adapted from ZZ.c in NTL 5.4.1.)
|
||||||
*/
|
*/
|
||||||
-long PowerMod(long a, long ee, long n, double ninv);
|
-long PowerMod(long a, long ee, long n, double ninv);
|
||||||
+long PowerMod(long a, long ee, long n, NTL::wide_double ninv);
|
+long PowerMod(long a, long ee, long n, NTL::mulmod_t ninv);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -210,14 +210,14 @@
|
||||||
Computes order of x mod p, given the factorisation F of p-1.
|
Computes order of x mod p, given the factorisation F of p-1.
|
||||||
*/
|
*/
|
||||||
-long order(long x, long p, double pinv, const Factorisation& F);
|
-long order(long x, long p, double pinv, const Factorisation& F);
|
||||||
+long order(long x, long p, NTL::wide_double pinv, const Factorisation& F);
|
+long order(long x, long p, NTL::mulmod_t pinv, const Factorisation& F);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Finds the smallest primitive root mod p, given the factorisation F of p-1.
|
Finds the smallest primitive root mod p, given the factorisation F of p-1.
|
||||||
*/
|
*/
|
||||||
-long primitive_root(long p, double pinv, const Factorisation& F);
|
-long primitive_root(long p, double pinv, const Factorisation& F);
|
||||||
+long primitive_root(long p, NTL::wide_double pinv, const Factorisation& F);
|
+long primitive_root(long p, NTL::mulmod_t pinv, const Factorisation& F);
|
||||||
|
|
||||||
|
|
||||||
}; // end namespace
|
}; // end namespace
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue