[libmath-prime-util-perl] 08/181: Add some 5.6.2 workarounds
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:51:01 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.36
in repository libmath-prime-util-perl.
commit e0742a9a7ec77b1930b4679bb0706234beb93c99
Author: Dana Jacobsen <dana at acm.org>
Date: Wed Dec 11 22:46:10 2013 -0800
Add some 5.6.2 workarounds
---
Changes | 8 +++++
MANIFEST | 1 +
lib/Math/Prime/Util.pm | 2 +-
lib/Math/Prime/Util/PP.pm | 6 ++--
xt/{primecount-many.t => primecount-approx.t} | 49 ++++++++++++++-------------
xt/primecount-many.t | 41 ++++++++++++++--------
6 files changed, 64 insertions(+), 43 deletions(-)
diff --git a/Changes b/Changes
index be82890..5767301 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,13 @@
Revision history for Perl module Math::Prime::Util
+0.36 2013-12
+
+ - Some 5.6.2-is-broken workarounds.
+
+ - Some LMO edge cases: small numbers that only show up if a #define is
+ changed, and counts > 18440000000000000000. Tested through 2^64-1 now.
+
+
0.35 2013-12-08
[API Changes]
diff --git a/MANIFEST b/MANIFEST
index aa254c6..2f77ac4 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -108,6 +108,7 @@ xt/make-script-test-data.pl
xt/measure_zeta_accuracy.pl
xt/pari-totient-moebius.pl
xt/nthprime.t
+xt/primecount-approx.t
xt/primecount-many.t
xt/primes-edgecases.pl
xt/rwh_primecount.py
diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index b0df220..8687dc3 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -1198,7 +1198,7 @@ sub consecutive_integer_lcm {
_validate_num($n) || _validate_positive_integer($n);
return 0 if $n < 1;
- my $max = ($_Config{'maxbits'} == 32) ? 22 : ($] < 5.008) ? 43 : 46;
+ my $max = ($_Config{'maxbits'} == 32) ? 22 : ($] < 5.008) ? 37 : 46;
if ($_HAVE_GMP && defined &Math::Prime::Util::GMP::consecutive_integer_lcm) {
my $clcm = Math::Prime::Util::GMP::consecutive_integer_lcm($n);
diff --git a/lib/Math/Prime/Util/PP.pm b/lib/Math/Prime/Util/PP.pm
index f7ef715..2de4bda 100644
--- a/lib/Math/Prime/Util/PP.pm
+++ b/lib/Math/Prime/Util/PP.pm
@@ -395,9 +395,9 @@ sub next_prime {
return $_prime_next_small[$n] if $n <= $#_prime_next_small;
- if (ref($n) ne 'Math::BigInt' &&
- $n >= ((_PP_prime_maxbits == 32) ? 4294967291 : 18446744073709551557)) {
- $n = Math::BigInt->new(''.$n);
+ if (ref($n) ne 'Math::BigInt' && $n >= 4294967291) {
+ $n = Math::BigInt->new(''.$_[0])
+ if _PP_prime_maxbits == 32 || $n >= 18446744073709551557;
}
# Be careful trying to do:
diff --git a/xt/primecount-many.t b/xt/primecount-approx.t
similarity index 77%
copy from xt/primecount-many.t
copy to xt/primecount-approx.t
index c93b617..5bd6976 100644
--- a/xt/primecount-many.t
+++ b/xt/primecount-approx.t
@@ -104,27 +104,34 @@ my %pivals = (
2305843009213693952 => 55890484045084135,
4611686018427387904 => 109932807585469973,
9223372036854775808 => 216289611853439384,
+# From http://trac.sagemath.org/ticket/7539 plus sieving
+ 11000000000000000000 => 256890014776557326,
+ 12000000000000000000 => 279675001309887227,
+ 13000000000000000000 => 302416755645383081,
+ 14000000000000000000 => 325118755759814408,
+ 15000000000000000000 => 347783970566657581,
+ 16000000000000000000 => 370414963651223281,
+ 17000000000000000000 => 393013970558176111,
+ 18000000000000000000 => 415582957615112220,
+ 18400000000000000000 => 424602543873663577,
+ 18440000000000000000 => 425504257754137607,
+ 18446700000000000000 => 425655290520421050,
+ 18446740000000000000 => 425656192205366999,
+ 18446744000000000000 => 425656282373661946,
+ 18446744030000000000 => 425656283049924141,
+ 18446744040000000000 => 425656283275356419,
+ 18446744050000000000 => 425656283500787632,
+ 18446744070000000000 => 425656283951611098,
+ 18446744073000000000 => 425656284019227775,
+ 18446744073700000000 => 425656284035002496,
+ 18446744073709000000 => 425656284035205391,
+ 18446744073709550000 => 425656284035217706,
+ 18446744073709551000 => 425656284035217730,
+ 18446744073709551615 => 425656284035217743,
);
-plan tests => 5 + 4*scalar(keys %pivals);
+plan tests => 3*scalar(keys %pivals);
-# Test prime counts using sampling
-diag "Sampling small prime counts, should take < 1 minute";
-{
- my $countstr;
- $countstr = join(" ", map { prime_count($_) } 1 .. 100000);
- is(sha256_hex($countstr), "cdbc5c94a927d0d9481cb26b3d3e60c0617a4be65ce9db3075c0363c7a81ef52", "prime counts 1..10^5");
- $countstr = join(" ", map { prime_count(100*$_ + ($_%101)) } 1000 .. 100000);
- is(sha256_hex($countstr), "73a0b71dedff9611e06fd57e52b88c8afd7f86b5351e4950b2dd5c1d68845b6e", "prime counts 10^5..10^7 (sample 100)");
- $countstr = join(" ", map { prime_count(10000*$_ + ($_%9973)) } 1000 .. 10000);
- is(sha256_hex($countstr), "d73736c54362136aa0a48bab44b55004b2e63e0d1d03a6cbe1aab42c6a579d0c", "prime counts 10^7..10^8 (sample 10k)");
- $countstr = join(" ", map { prime_count(500000*$_ + 250837 + $_) } 200 .. 2000);
- is(sha256_hex($countstr), "00a580b2f52b661f065f5ce49bd2aeacb3b169d8903cf824b65731441e40f0b9", "prime counts 10^8..10^9 (sample 500k)");
- $countstr = join(" ", map { prime_count(10000000*$_ + 250837 + $_) } 100 .. 1000);
- is(sha256_hex($countstr), "9fd78debf4b510ee6d230cabf314ebef5eb253ee63d5df658e45414613f7b8c2", "prime counts 10^9..10^10 (sample 10M)");
-}
-
-diag "Approximations and limits, should be a few seconds";
foreach my $n (sort {$a <=> $b} keys %pivals) {
my $pin = $pivals{$n};
cmp_ok( prime_count_upper($n), '>=', $pin, "Pi($n) <= upper estimate" );
@@ -137,9 +144,3 @@ foreach my $n (sort {$a <=> $b} keys %pivals) {
: 0.2;
cmp_ok( abs($pin - $approx) * (100.0 / $percent_limit), '<=', $pin, "prime_count_approx($n) within $percent_limit\% of Pi($n)");
}
-
-diag "Prime counts, will take a very long time";
-foreach my $n (sort {$a <=> $b} keys %pivals) {
- my $pin = $pivals{$n};
- is( prime_count($n), $pin, "Pi($n) = $pin" );
-}
diff --git a/xt/primecount-many.t b/xt/primecount-many.t
index c93b617..5d68460 100644
--- a/xt/primecount-many.t
+++ b/xt/primecount-many.t
@@ -104,9 +104,34 @@ my %pivals = (
2305843009213693952 => 55890484045084135,
4611686018427387904 => 109932807585469973,
9223372036854775808 => 216289611853439384,
+# From http://trac.sagemath.org/ticket/7539 plus sieving
+# 11000000000000000000 => 256890014776557326,
+# 12000000000000000000 => 279675001309887227,
+# 13000000000000000000 => 302416755645383081,
+# 14000000000000000000 => 325118755759814408,
+# 15000000000000000000 => 347783970566657581,
+# 16000000000000000000 => 370414963651223281,
+# 17000000000000000000 => 393013970558176111,
+# 18000000000000000000 => 415582957615112220,
+# 18400000000000000000 => 424602543873663577,
+18440000000000000000 => 425504257754137607, # verified
+18446700000000000000 => 425655290520421050, # verified
+# 18446740000000000000 => 425656192205366999,
+# 18446744000000000000 => 425656282373661946,
+# 18446744030000000000 => 425656283049924141,
+# 18446744040000000000 => 425656283275356419,
+# 18446744050000000000 => 425656283500787632,
+# 18446744070000000000 => 425656283951611098,
+# 18446744073000000000 => 425656284019227775, # verified
+# 18446744073700000000 => 425656284035002496, # verified
+# 18446744073709000000 => 425656284035205391, # verified
+# 18446744073709550000 => 425656284035217706, # verified
+# 18446744073709551000 => 425656284035217730,
+18446744073709551615 => 425656284035217743, # verified
+#
);
-plan tests => 5 + 4*scalar(keys %pivals);
+plan tests => 5 + scalar(keys %pivals);
# Test prime counts using sampling
diag "Sampling small prime counts, should take < 1 minute";
@@ -124,20 +149,6 @@ diag "Sampling small prime counts, should take < 1 minute";
is(sha256_hex($countstr), "9fd78debf4b510ee6d230cabf314ebef5eb253ee63d5df658e45414613f7b8c2", "prime counts 10^9..10^10 (sample 10M)");
}
-diag "Approximations and limits, should be a few seconds";
-foreach my $n (sort {$a <=> $b} keys %pivals) {
- my $pin = $pivals{$n};
- cmp_ok( prime_count_upper($n), '>=', $pin, "Pi($n) <= upper estimate" );
- cmp_ok( prime_count_lower($n), '<=', $pin, "Pi($n) >= lower estimate" );
- my $approx = prime_count_approx($n);
- my $percent_limit = ($n > 1000000000000) ? 0.00005
- : ($n > 10000000000) ? 0.0002
- : ($n > 100000000) ? 0.002
- : ($n > 1000000) ? 0.02
- : 0.2;
- cmp_ok( abs($pin - $approx) * (100.0 / $percent_limit), '<=', $pin, "prime_count_approx($n) within $percent_limit\% of Pi($n)");
-}
-
diag "Prime counts, will take a very long time";
foreach my $n (sort {$a <=> $b} keys %pivals) {
my $pin = $pivals{$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