[libmath-prime-util-perl] 08/11: Swap system/user rand
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:46:12 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.15
in repository libmath-prime-util-perl.
commit a35c1075b96b5e07e8599ef4320946f3fa98fe83
Author: Dana Jacobsen <dana at acm.org>
Date: Sun Dec 9 15:31:39 2012 -0800
Swap system/user rand
---
lib/Math/Prime/Util.pm | 14 +++++++-------
t/16-randomprime.t | 3 ++-
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index dc79c86..87399cb 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -438,12 +438,11 @@ sub primes {
# sure you use version 1.16 or later.
sub _get_rand_func {
my $irandf;
- if (defined &::rand) {
+ if (defined &::rand) { # User-defined rand function
$irandf = sub {
my($range) = @_;
return 0 if $range <= 0;
- my $rand_max_bits = $_Config{'system_randbits'};
- return int(::rand($range+1)) if $range < (1 << $rand_max_bits);
+ return int(::rand($range+1)) if $range < (1 << 31);
my $rbits = 0;
if (ref($range) eq 'Math::BigInt') {
$rbits = length($range->as_bin) - 2;
@@ -455,18 +454,19 @@ sub primes {
my $rbitsleft = $rbits;
my $U = $range - $range; # zero in possible bigint
while ($rbitsleft > 0) {
- my $usebits = ($rbitsleft > $rand_max_bits) ? $rand_max_bits : $rbitsleft;
+ my $usebits = ($rbitsleft > 31) ? 31 : $rbitsleft;
$U = ($U << $usebits) + int(::rand(1 << $usebits));
$rbitsleft -= $usebits;
}
return $U if $U <= $range;
}
};
- } else {
+ } else { # System rand function
$irandf = sub {
my($range) = @_;
return 0 if $range <= 0;
- return int(rand($range+1)) if $range < (1 << 31);
+ my $rand_max_bits = $_Config{'system_randbits'};
+ return int(rand($range+1)) if $range < (1 << $rand_max_bits);
my $rbits = 0;
if (ref($range) eq 'Math::BigInt') {
$rbits = length($range->as_bin) - 2;
@@ -478,7 +478,7 @@ sub primes {
my $rbitsleft = $rbits;
my $U = $range - $range; # zero in possible bigint
while ($rbitsleft > 0) {
- my $usebits = ($rbitsleft > 31) ? 31 : $rbitsleft;
+ my $usebits = ($rbitsleft > $rand_max_bits) ? $rand_max_bits : $rbitsleft;
$U = ($U << $usebits) + int(rand(1 << $usebits));
$rbitsleft -= $usebits;
}
diff --git a/t/16-randomprime.t b/t/16-randomprime.t
index 22664ee..ce9675f 100644
--- a/t/16-randomprime.t
+++ b/t/16-randomprime.t
@@ -6,7 +6,8 @@ use Test::More;
#use Math::Random::MT qw/rand/;
#use Math::Random::MT::Auto qw/rand/;
#sub rand { return 0.5; }
-use Math::Prime::Util qw/random_prime random_ndigit_prime random_nbit_prime
+use Math::Prime::Util qw/-nobigint
+ random_prime random_ndigit_prime random_nbit_prime
random_maurer_prime is_prime/;
my $use64 = Math::Prime::Util::prime_get_config->{'maxbits'} > 32;
--
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