This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Math::BigInt from version 1.999817 to 1.999818
authorSteve Hay <steve.m.hay@googlemail.com>
Mon, 28 Oct 2019 08:13:21 +0000 (08:13 +0000)
committerSteve Hay <steve.m.hay@googlemail.com>
Mon, 28 Oct 2019 08:13:21 +0000 (08:13 +0000)
Porting/Maintainers.pl
cpan/Math-BigInt/lib/Math/BigFloat.pm
cpan/Math-BigInt/lib/Math/BigInt.pm
cpan/Math-BigInt/lib/Math/BigInt/Calc.pm
cpan/Math-BigInt/lib/Math/BigInt/Lib.pm
cpan/Math-BigInt/t/calling.t
cpan/Math-BigInt/t/to_ieee754-mbf.t
t/porting/customized.dat

index 0a18dcc..03340a7 100755 (executable)
@@ -718,7 +718,7 @@ use File::Glob qw(:case);
     },
 
     'Math::BigInt' => {
-        'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-1.999817.tar.gz',
+        'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-1.999818.tar.gz',
         'FILES'        => q[cpan/Math-BigInt],
         'EXCLUDED'     => [
             qr{^examples/},
@@ -728,14 +728,6 @@ use File::Glob qw(:case);
                 t/01load.t
                 ),
         ],
-        # CPAN RT 130736
-        'CUSTOMIZED'   => [
-            'lib/Math/BigFloat.pm',
-            'lib/Math/BigInt.pm',
-            'lib/Math/BigInt/Calc.pm',
-            'lib/Math/BigInt/Lib.pm',
-            'lib/Math-BigInt/t/calling.t'
-        ],
     },
 
     'Math::BigInt::FastCalc' => {
index 4bf6e8c..f1d7a1a 100644 (file)
@@ -19,7 +19,7 @@ use warnings;
 use Carp qw< carp croak >;
 use Math::BigInt ();
 
-our $VERSION = '1.999817_01';
+our $VERSION = '1.999818';
 
 require Exporter;
 our @ISA        = qw/Math::BigInt/;
@@ -4448,13 +4448,17 @@ sub to_ieee754 {
 
             $sign = 1 if $x -> is_neg();
 
-            # Get the mantissa and exponent in base $b.
+            # Now we need to compute the mantissa and exponent in base $b.
 
             my $binv = $class -> new("0.5");
             my $b    = $class -> new(2);
             my $one  = $class -> bone();
 
-            $expo = $class -> bzero();
+            # We start off by initializing the exponent to zero and the
+            # mantissa to the input value. Then we increase the mantissa and
+            # decrease the exponent, or vice versa, until the mantissa is in
+            # the desired range or we hit one of the limits for the exponent.
+
             $mant = $x -> copy() -> babs();
 
             # We need to find the base 2 exponent. First make an estimate of
@@ -4471,15 +4475,30 @@ sub to_ieee754 {
             my ($m, $e) = $x -> nparts();
             my $ms = $m -> numify();
             my $es = $e -> numify();
-            $expo = (log(abs($ms))/log(10) + $es) * log(10)/log(2);
-            $expo = int($expo);
-            if ($expo > $emax) {
-                $expo = $emax;
-            } elsif ($expo < $emin) {
-                $expo = $emin;
+
+            my $expo_est = (log(abs($ms))/log(10) + $es) * log(10)/log(2);
+            $expo_est = int($expo_est);
+
+            # Limit the exponent.
+
+            if ($expo_est > $emax) {
+                $expo_est = $emax;
+            } elsif ($expo_est < $emin) {
+                $expo_est = $emin;
+            }
+
+            # Don't multiply by a number raised to a negative exponent. This
+            # will cause a division, whose result is truncated to some fixed
+            # number of digits. Instead, multiply by the inverse number raised
+            # to a positive exponent.
+
+            $expo = $class -> new($expo_est);
+            if ($expo_est > 0) {
+                $mant -> bmul($binv -> copy() -> bpow($expo));
+            } elsif ($expo_est < 0) {
+                my $expo_abs = $expo -> copy() -> bneg();
+                $mant -> bmul($b -> copy() -> bpow($expo_abs));
             }
-            $expo = $class -> new($expo);
-            $mant -> bmul($binv -> copy() -> bpow($expo));
 
             # Final adjustment.
 
index 26e009c..185f802 100644 (file)
@@ -22,7 +22,7 @@ use warnings;
 
 use Carp qw< carp croak >;
 
-our $VERSION = '1.999817_01';
+our $VERSION = '1.999818';
 
 require Exporter;
 our @ISA = qw(Exporter);
index 0e85ce0..cd8f1ee 100644 (file)
@@ -7,7 +7,7 @@ use warnings;
 use Carp qw< carp croak >;
 use Math::BigInt::Lib;
 
-our $VERSION = '1.999817_01';
+our $VERSION = '1.999818';
 
 our @ISA = ('Math::BigInt::Lib');
 
index fa85b6a..fde2812 100644 (file)
@@ -4,7 +4,7 @@ use 5.006001;
 use strict;
 use warnings;
 
-our $VERSION = '1.999817_01';
+our $VERSION = '1.999818';
 
 use Carp;
 
index a690e36..c3c9aff 100644 (file)
@@ -6,7 +6,7 @@ use strict;
 use warnings;
 use lib 't';
 
-my $VERSION = '1.999817_01';       # adjust manually to match latest release
+my $VERSION = '1.999818';       # adjust manually to match latest release
 
 use Test::More tests => 5;
 
index 047d848..1f043f9 100644 (file)
@@ -187,7 +187,7 @@ for my $k (@k) {
         my $bytes = pack "B*", $bin;
         my $hex   = unpack "H*", $bytes;
 
-        note("\n", $entry -> {dsc}, " (k = $k)\n\n");
+        note("\n", $entry -> {dsc}, " (k = $k): ", $entry -> {asc}, "\n\n");
 
         my $x = Math::BigFloat -> new($entry -> {mbf});
 
index 811b8e7..1ddcd62 100644 (file)
@@ -9,10 +9,6 @@ Digest::MD5 cpan/Digest-MD5/MD5.xs 249bed648232192ce018f7f894ad127c3a639831
 Digest::MD5 cpan/Digest-MD5/t/files.t e987329d2411ff60ad9a2bdf93fdf5f6943467e8
 Filter::Util::Call pod/perlfilter.pod e9833bf4ebc51087dfee5c553e0f8a5eef67212d
 Locale::Maketext::Simple cpan/Locale-Maketext-Simple/lib/Locale/Maketext/Simple.pm 57ed38905791a17c150210cd6f42ead22a7707b6
-Math::BigInt cpan/Math-BigInt/lib/Math/BigFloat.pm 4bc175802939bf831e0cef6e79528ff0bcc18171
-Math::BigInt cpan/Math-BigInt/lib/Math/BigInt.pm 7a913de4b2e3a13c3020dd5aff6e2ed46381732a
-Math::BigInt cpan/Math-BigInt/lib/Math/BigInt/Calc.pm c35d1e32c38459ead7bfb7780e21fd4c7d3f5a2b
-Math::BigInt cpan/Math-BigInt/lib/Math/BigInt/Lib.pm 1e857a3a32c99d84c42435523a574b30913537d6
 Math::Complex cpan/Math-Complex/lib/Math/Complex.pm 198ea6c6c584f5ea79a0fd7e9d411d0878f3b2af
 Math::Complex cpan/Math-Complex/t/Complex.t 4f307ed6fc59f1e5fb0e6b11103fc631b6bdb335
 Math::Complex cpan/Math-Complex/t/Trig.t 2682526e23a161d54732c2a66393fe4a234d1865