[libmath-prime-util-perl] 01/15: ranged moebius was depending on char being signed. Fix. Thanks Debian testers.
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:48:46 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.29
in repository libmath-prime-util-perl.
commit ae11792b3ac9cda84189f6390a95c6e538467191
Author: Dana Jacobsen <dana at acm.org>
Date: Thu May 23 23:03:23 2013 -0700
ranged moebius was depending on char being signed. Fix. Thanks Debian testers.
---
Changes | 4 ++++
XS.xs | 2 +-
util.c | 12 ++++++------
util.h | 2 +-
4 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/Changes b/Changes
index 9c4b0e3..80e2fee 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,9 @@
Revision history for Perl extension Math::Prime::Util.
+0.29 xx May 2013
+
+ - Fix a signed vs. unsigned char issue in ranged moebius.
+
0.28 23 May 2013
- An optimization to nth_prime caused occasional threaded Win32 faults.
diff --git a/XS.xs b/XS.xs
index bc01288..3422caa 100644
--- a/XS.xs
+++ b/XS.xs
@@ -546,7 +546,7 @@ _XS_moebius(IN UV lo, IN UV hi = 0)
UV i;
PPCODE:
if (hi != lo && hi != 0) { /* mobius in a range */
- char* mu = _moebius_range(lo, hi);
+ signed char* mu = _moebius_range(lo, hi);
MPUassert( mu != 0, "_moebius_range returned 0" );
EXTEND(SP, hi-lo+1);
for (i = lo; i <= hi; i++)
diff --git a/util.c b/util.c
index 48d6ce0..3507eaa 100644
--- a/util.c
+++ b/util.c
@@ -739,14 +739,14 @@ UV _XS_nth_prime(UV n)
#define PGTLO(p,lo) ((p) >= lo) ? (p) : ((p)*(lo/(p)) + ((lo%(p))?(p):0))
#define P2GTLO(pinit, p, lo) \
((pinit) >= lo) ? (pinit) : ((p)*(lo/(p)) + ((lo%(p))?(p):0))
-char* _moebius_range(UV lo, UV hi)
+signed char* _moebius_range(UV lo, UV hi)
{
- char* mu;
+ signed char* mu;
UV i;
UV sqrtn = isqrt(hi);
#if 0
/* Simple char method. Needs way too many primes. */
- New(0, mu, hi-lo+1, char);
+ New(0, mu, hi-lo+1, signed char);
if (mu == 0)
croak("Could not get memory for %"UVuf" moebius results\n", hi-lo+1);
memset(mu, 1, hi-lo+1);
@@ -780,7 +780,7 @@ char* _moebius_range(UV lo, UV hi)
for (i = PGTLO(p, lo); i <= hi; i += p)
A[i-lo] *= -(IV)p;
} END_DO_FOR_EACH_PRIME
- New(0, mu, hi-lo+1, char);
+ New(0, mu, hi-lo+1, signed char);
if (mu == 0)
croak("Could not get memory for %"UVuf" moebius results\n", hi-lo+1);
memset(mu, 0, hi-lo+1);
@@ -801,7 +801,7 @@ char* _moebius_range(UV lo, UV hi)
unsigned char logp;
UV nextlog;
- Newz(0, mu, hi-lo+1, char);
+ Newz(0, mu, hi-lo+1, signed char);
if (mu == 0)
croak("Could not get memory for %"UVuf" moebius results\n", hi-lo+1);
A = (unsigned char*) mu;
@@ -883,7 +883,7 @@ IV _XS_mertens(UV n) {
* This implementation uses their lemma 2.1 directly, so is n^1/2.
*/
UV u, i, m, nmk;
- char* mu;
+ signed char* mu;
IV* M;
IV sum;
diff --git a/util.h b/util.h
index 36ba169..4194879 100644
--- a/util.h
+++ b/util.h
@@ -15,7 +15,7 @@ extern UV _XS_prev_prime(UV x);
extern UV _XS_prime_count(UV low, UV high);
extern UV _XS_nth_prime(UV x);
-extern char* _moebius_range(UV low, UV high);
+extern signed char* _moebius_range(UV low, UV high);
extern UV* _totient_range(UV low, UV high);
extern IV _XS_mertens(UV n);
extern double _XS_chebyshev_theta(UV n);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git
More information about the Pkg-perl-cvs-commits
mailing list