[libmath-prime-util-perl] 20/20: Fix 32-bit issues
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:47:32 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.23
in repository libmath-prime-util-perl.
commit 4562fd0abd3ad4134ef1fa44a8975ba66f4bb766
Author: Dana Jacobsen <dana at acm.org>
Date: Tue Mar 5 08:49:54 2013 -0800
Fix 32-bit issues
---
lehmer.c | 11 ++++++++++-
util.h | 6 +++---
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/lehmer.c b/lehmer.c
index 7aa57b2..cc666d1 100644
--- a/lehmer.c
+++ b/lehmer.c
@@ -185,7 +185,11 @@ static UV icbrt(UV n)
{
#if 0
/* The integer cube root code is about 30% faster for me */
+#if BITS_PER_WORD == 32
+ if (n >= UVCONST(4291015625)) return UVCONST(1625);
+#else
if (n >= UVCONST(18446724184312856125)) return UVCONST(2642245);
+#endif
UV root = (UV) pow(n, 1.0/3.0);
if (root*root*root > n) {
root--;
@@ -197,7 +201,12 @@ static UV icbrt(UV n)
#else
int s;
UV y = 0;
- for (s = (sizeof(UV)*8)-1; s >= 0; s -= 3) {
+ /* Alternately: s = (sizeof(UV)*8)-(sizeof(UV)*8)%3 */
+#if BITS_PER_WORD == 32
+ for (s = 30; s >= 0; s -= 3) {
+#else
+ for (s = 63; s >= 0; s -= 3) {
+#endif
UV b;
y += y;
b = 3*y*(y+1)+1;
diff --git a/util.h b/util.h
index a2d7f7c..15c4c8d 100644
--- a/util.h
+++ b/util.h
@@ -34,11 +34,11 @@ extern double _XS_RiemannR(double x);
#endif
static UV isqrt(UV n) {
- #if BIT_PER_WORD == 32
+#if BITS_PER_WORD == 32
if (n >= UVCONST(4294836225)) return UVCONST(65535);
- #else
+#else
if (n >= UVCONST(18446744065119617025)) return UVCONST(4294967295);
- #endif
+#endif
UV root = (UV) sqrt((double)n);
while (root*root > n) root--;
while ((root+1)*(root+1) <= n) root++;
--
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