[libmath-prime-util-perl] 34/43: Tighten nth_prime_{upper,lower}

Partha P. Mukherjee ppm-guest at moszumanska.debian.org
Thu May 21 18:53:08 UTC 2015


This is an automated email from the git hooks/post-receive script.

ppm-guest pushed a commit to annotated tag v0.40
in repository libmath-prime-util-perl.

commit d35d25cfdce763e5362ae7f8bbed4f752b9b0b4f
Author: Dana Jacobsen <dana at acm.org>
Date:   Tue Apr 15 15:16:05 2014 -0700

    Tighten nth_prime_{upper,lower}
---
 Changes                | 2 ++
 util.c                 | 5 ++++-
 xt/primecount-approx.t | 3 ++-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/Changes b/Changes
index c4caa69..34144a2 100644
--- a/Changes
+++ b/Changes
@@ -21,6 +21,8 @@ Revision history for Perl module Math::Prime::Util
       Cippola 1902 is still used for PP and large values, with a slightly
       more accurate third order correction.
 
+    - Tighten nth_prime_lower and nth_prime_upper for very small values.
+
 
 0.39  2014-03-01
 
diff --git a/util.c b/util.c
index a33bcbf..f246c34 100644
--- a/util.c
+++ b/util.c
@@ -705,7 +705,7 @@ UV nth_prime_upper(UV n)
   else if (n >=  39017)    /* Dusart 1999 page 14 */
     upper = fn * (flogn + flog2n - 0.9484);
   else if (n >=     6)     /* Modified from Robin 1983 for 6-39016 _only_ */
-    upper = fn * ( flogn  +  0.6000 * flog2n );
+    upper = fn * ( flogn  +  0.5982 * flog2n ) - 5;
   else
     upper = fn * ( flogn + flog2n );
 
@@ -742,6 +742,9 @@ UV nth_prime_lower(UV n)
 
   /* Dusart 2010 page 2, for all n >= 3 */
   lower = fn * (flogn + flog2n - 1.0 + ((flog2n-2.10)/flogn));
+  /* Tighten small values */
+  if      (n <  2679) lower = 1.003 * lower + 23;
+  else if (n < 14353) lower = 1.001 * lower + 21;
 
   return (UV) floorl(lower);
 }
diff --git a/xt/primecount-approx.t b/xt/primecount-approx.t
index e01d1ef..38a8dc6 100644
--- a/xt/primecount-approx.t
+++ b/xt/primecount-approx.t
@@ -139,7 +139,8 @@ foreach my $n (sort {$a <=> $b} keys %pivals) {
   cmp_ok( ''.prime_count_upper($n), '>=', $pin, "Pi($n) <= upper estimate" );
   cmp_ok( ''.prime_count_lower($n), '<=', $pin, "Pi($n) >= lower estimate" );
   # Result may be bigint, so turn into float for percentage comparison
-  my $approx = 0.0 + ''.prime_count_approx($n);
+  print "n = '$n'\n";
+  my $approx = 0.0 + (''.prime_count_approx($n));
   my $percent_limit = ($n > 1000000000000) ? 0.00005
                     : ($n >   10000000000) ? 0.0002
                     : ($n >     100000000) ? 0.002

-- 
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