[libmath-prime-util-perl] 19/40: Update some benchmarks

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


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

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

commit 6bf74f6ab3128598af1b874780d54797c5ba4daf
Author: Dana Jacobsen <dana at acm.org>
Date:   Thu Jul 11 17:34:21 2013 -0700

    Update some benchmarks
---
 examples/bench-factor-extra.pl |  4 +++-
 examples/bench-isprime-bpsw.pl | 35 ++++++++++++++++++++++++++---------
 2 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/examples/bench-factor-extra.pl b/examples/bench-factor-extra.pl
index 98d3342..674ce19 100755
--- a/examples/bench-factor-extra.pl
+++ b/examples/bench-factor-extra.pl
@@ -56,6 +56,7 @@ sub test_at_digits {
     $nfactored{'prho'} += $calc_nfacs->(Math::Prime::Util::prho_factor($_, $rounds));
     $nfactored{'pbrent'} += $calc_nfacs->(Math::Prime::Util::pbrent_factor($_, $rounds));
     $nfactored{'pminus1'} += $calc_nfacs->(Math::Prime::Util::pminus1_factor($_, $p1smooth));
+    $nfactored{'pplus1'} += $calc_nfacs->(Math::Prime::Util::pplus1_factor($_, $p1smooth));
     $nfactored{'squfof'} += $calc_nfacs->(Math::Prime::Util::squfof_factor($_, $sqrounds));
     $nfactored{'rsqufof'} += $calc_nfacs->(Math::Prime::Util::rsqufof_factor($_, $rsqrounds));
     #$nfactored{'trial'} += $calc_nfacs->(Math::Prime::Util::trial_factor($_));
@@ -74,7 +75,8 @@ sub test_at_digits {
     "prho"    => sub { Math::Prime::Util::prho_factor($_, $rounds) for @nums },
     "pbrent"  => sub { Math::Prime::Util::pbrent_factor($_, $rounds) for @nums },
     "pminus1" => sub { Math::Prime::Util::pminus1_factor($_, $rounds) for @nums },
-    "fermat"  => sub { Math::Prime::Util::fermat_factor($_, $rounds) for @nums },
+    "pplus1"  => sub { Math::Prime::Util::pplus1_factor($_, $rounds) for @nums},
+    "fermat"  => sub { Math::Prime::Util::fermat_factor($_, $rounds) for @nums},
     "holf"    => sub { Math::Prime::Util::holf_factor($_, $hrounds) for @nums },
     "squfof"  => sub { Math::Prime::Util::squfof_factor($_, $sqrounds) for @nums },
     "rsqufof" => sub { Math::Prime::Util::rsqufof_factor($_) for @nums },
diff --git a/examples/bench-isprime-bpsw.pl b/examples/bench-isprime-bpsw.pl
index ca9a61a..62ce29b 100755
--- a/examples/bench-isprime-bpsw.pl
+++ b/examples/bench-isprime-bpsw.pl
@@ -6,18 +6,33 @@ $| = 1;  # fast pipes
 use Math::Prime::Util;
 use Math::Primality;
 
+my $count = shift || -1;
+
 # GMP is ~3x faster than Calc or Pari for these operations
 use bigint try=>'GMP';
 srand(500);
-use Math::BigInt::Random::OO;
-my $gen = Math::BigInt::Random::OO -> new(length => 80);
-#my $gen = Math::BigInt::Random::OO -> new(length => 8);
+use Config;
+
+my $rgen = sub {
+  my $range = shift;
+  return 0 if $range <= 0;
+  my $rbits = 0; { my $t = $range; while ($t) { $rbits++; $t >>= 1; } }
+  while (1) {
+    my $rbitsleft = $rbits;
+    my $U = $range - $range;  # 0 or bigint 0
+    while ($rbitsleft > 0) {
+      my $usebits = ($rbitsleft > $Config{randbits}) ? $Config{randbits} : $rbitsleft;
+      $U = ($U << $usebits) + int(rand(1 << $usebits));
+      $rbitsleft -= $usebits;
+    }
+    return $U if $U <= $range;
+  }
+};
 
 my @rns;
 while (@rns < 50) {
-  # Ensure $n is an object of our bigint class, not MBROO's choice.
-  my $n = Math::BigInt->new( $gen->generate()->bstr );
-  $n++ if ($n % 2) == 0;    # Math::BigInt::Random::OO keeps making evens (bug?)
+  my $n = $rgen->( Math::BigInt->new(2)->bpow(81) );
+  $n++ if ($n % 2) == 0;
   next unless ($n % 2) != 0;
   push @rns, $n;
 }
@@ -36,12 +51,14 @@ print "OK\n";
 
 use Benchmark qw/:all/;
 my $sum = 0;
-cmpthese(-2, {
+cmpthese($count, {
   "MP  MR" => sub { $sum += Math::Primality::is_strong_pseudoprime("$_","2") for @rns; },
-  "MPU MR" => sub { $sum += Math::Prime::Util::is_strong_pseudoprime($_,2) for @rns; },
+  "MPU MR" => sub { $sum += Math::Prime::Util::GMP::is_strong_pseudoprime($_,2) for @rns; },
   #"MPUxMR" => sub { Math::Prime::Util::miller_rabin($_,2) for @rns; },
   "MP  LP" => sub { $sum += Math::Primality::is_strong_lucas_pseudoprime("$_") for @rns;},
-  "MPU LP" => sub { $sum += Math::Prime::Util::is_strong_lucas_pseudoprime($_) for @rns;},
+  "MPU LP" => sub { $sum += Math::Prime::Util::GMP::is_strong_lucas_pseudoprime($_) for @rns;},
+  "MPU ELP" => sub { $sum += Math::Prime::Util::GMP::is_extra_strong_lucas_pseudoprime($_) for @rns;},
+  #"MPU AELP" => sub { $sum += Math::Prime::Util::GMP::is_almost_extra_strong_lucas_pseudoprime($_) for @rns;},
   "MP  IP" => sub { $sum += Math::Primality::is_prime("$_") for @rns;},
   "MPU IP" => sub { $sum += Math::Prime::Util::is_prime($_) for @rns;},
   #"MPUxIP" => sub { Math::Prime::Util::is_prime($_) for @rns;},

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