Front page | perl.perl5.changes |
Postings from May 2008
Change 33930: Integrate:
From:
Nicholas Clark
Date:
May 25, 2008 15:45
Subject:
Change 33930: Integrate:
Change 33930 by nicholas@mouse-mill on 2008/05/25 22:33:32
Integrate:
[ 33821]
Integrate:
[ 33666]
Subject: [PATCH] Math::BigRat 0.22
From: Tels <nospam-abuse@bloodgate.com>
Date: Mon, 7 Apr 2008 21:27:30 +0200
Message-Id: <200804072127.38258@bloodgate.com>
[ 33698]
Upgrade to Math::Complex 1.54
[ 33715]
Upgrade to Math::BigInt v1.89
[ 33772]
Upgrade to bignum-0.23
[ 33915]
Integrate:
[ 33905]
Subject: [PATCH] Documentation typo fix for Attribute::Handlers.
From: Florian Ragwitz <rafl@debian.org>
Date: Wed, 21 May 2008 22:42:40 +0200
Message-Id: <1211402560-12949-1-git-send-email-rafl@debian.org>
[ 33906]
Following a conversation on IRC, Artur thinks it best if we consider
the core version of Attribute::Handlers official from now on, and
hence remove it from Porting/Maintainers.pl
[ 33907]
Rafael will take over Attribute::Handlers
[ 33914]
Bump the version number following change 33905 (and for any other
changes that might come between 5.10's release and 5.8.9's). Note that
Rafael has kindly volunteered to take over maintainer.
Affected files ...
... //depot/maint-5.8/perl/MANIFEST#431 integrate
... //depot/maint-5.8/perl/Porting/Maintainers.pl#41 integrate
... //depot/maint-5.8/perl/lib/Attribute/Handlers.pm#9 integrate
... //depot/maint-5.8/perl/lib/Math/BigFloat.pm#19 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt.pm#22 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/bare_mbf.t#14 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/bare_mbi.t#16 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/bigfltpm.inc#16 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/bigfltpm.t#13 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/bigintpm.inc#17 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/bigintpm.t#17 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/calling.t#7 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/const_mbf.t#2 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/constant.t#4 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/mbimbf.t#6 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/sub_mbf.t#13 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/sub_mbi.t#16 integrate
... //depot/maint-5.8/perl/lib/Math/BigInt/t/with_sub.t#13 integrate
... //depot/maint-5.8/perl/lib/Math/BigRat.pm#14 integrate
... //depot/maint-5.8/perl/lib/Math/BigRat/t/biglog.t#2 integrate
... //depot/maint-5.8/perl/lib/Math/BigRat/t/bigrat.t#10 integrate
... //depot/maint-5.8/perl/lib/Math/BigRat/t/bigroot.t#2 integrate
... //depot/maint-5.8/perl/lib/Math/BigRat/t/hang.t#1 branch
... //depot/maint-5.8/perl/lib/Math/Complex.pm#7 integrate
... //depot/maint-5.8/perl/lib/Math/Complex.t#7 integrate
... //depot/maint-5.8/perl/lib/Math/Trig.pm#9 integrate
... //depot/maint-5.8/perl/lib/Math/Trig.t#8 integrate
... //depot/maint-5.8/perl/lib/bigint.pm#11 integrate
... //depot/maint-5.8/perl/lib/bignum.pm#11 integrate
... //depot/maint-5.8/perl/lib/bigrat.pm#10 integrate
Differences ...
==== //depot/maint-5.8/perl/MANIFEST#431 (text) ====
Index: perl/MANIFEST
--- perl/MANIFEST#430~33923~ 2008-05-25 13:30:46.000000000 -0700
+++ perl/MANIFEST 2008-05-25 15:33:32.000000000 -0700
@@ -1815,6 +1815,7 @@
lib/Math/BigRat/t/bigrat.t Math::BigRat test
lib/Math/BigRat/t/bigratup.t test under $Math::BigInt::upgrade
lib/Math/BigRat/t/bigroot.t Math::BigRat test
+lib/Math/BigRat/t/hang.t Math::BigRat test for bug #34584 - hang in exp()
lib/Math/BigRat/t/requirer.t see if require works properly
lib/Math/BigRat/t/trap.t see if trap_nan and trap_inf work
lib/Math/Complex.pm A Complex package
==== //depot/maint-5.8/perl/Porting/Maintainers.pl#41 (text) ====
Index: perl/Porting/Maintainers.pl
--- perl/Porting/Maintainers.pl#40~33922~ 2008-05-25 12:51:20.000000000 -0700
+++ perl/Porting/Maintainers.pl 2008-05-25 15:33:32.000000000 -0700
@@ -107,10 +107,10 @@
'Attribute::Handlers' =>
{
- 'MAINTAINER' => 'abergman',
+ 'MAINTAINER' => 'rgarcia',
'FILES' => q[lib/Attribute/Handlers.pm
lib/Attribute/Handlers],
- 'CPAN' => 1,
+ 'CPAN' => 0,
},
'B::Concise' =>
==== //depot/maint-5.8/perl/lib/Attribute/Handlers.pm#9 (text) ====
Index: perl/lib/Attribute/Handlers.pm
--- perl/lib/Attribute/Handlers.pm#8~33183~ 2008-02-02 04:40:48.000000000 -0800
+++ perl/lib/Attribute/Handlers.pm 2008-05-25 15:33:32.000000000 -0700
@@ -4,7 +4,7 @@
use warnings;
use strict;
use vars qw($VERSION $AUTOLOAD);
-$VERSION = '0.79';
+$VERSION = '0.80';
# $DB::single=1;
my %symcache;
@@ -686,7 +686,7 @@
sub fn :Ugly(sister) :Omni('po',tent()) {...}
my @arr :Good :Omni(s/cie/nt/);
- my %hsh :Good(q/bye) :Omni(q/bus/);
+ my %hsh :Good(q/bye/) :Omni(q/bus/);
would cause the following handlers to be invoked:
@@ -864,7 +864,8 @@
=head1 AUTHOR
-Damian Conway (damian@conway.org)
+Damian Conway (damian@conway.org). The maintainer of this module is now Rafael
+Garcia-Suarez (rgarciasuarez@gmail.com).
=head1 BUGS
==== //depot/maint-5.8/perl/lib/Math/BigFloat.pm#19 (text) ====
Index: perl/lib/Math/BigFloat.pm
--- perl/lib/Math/BigFloat.pm#18~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigFloat.pm 2008-05-25 15:33:32.000000000 -0700
@@ -12,7 +12,7 @@
# _a : accuracy
# _p : precision
-$VERSION = '1.59';
+$VERSION = '1.60';
require 5.006;
require Exporter;
@@ -2142,8 +2142,9 @@
# But we need at least $scale digits, so calculate how many are missing
my $shift = $scale - $digits;
- # That should never happen (we take care of integer guesses above)
- # $shift = 0 if $shift < 0;
+ # This happens if the input had enough digits
+ # (we take care of integer guesses above)
+ $shift = 0 if $shift < 0;
# Multiply in steps of 100, by shifting left two times the "missing" digits
my $s2 = $shift * 2;
@@ -2846,12 +2847,49 @@
return $y->bnan() if ($y->{sign} eq $nan) || ($x->{sign} eq $nan);
- return $upgrade->new($y)->batan2($upgrade->new($x),@r) if defined $upgrade;
-
# Y X
# 0 0 result is 0
# 0 +x result is 0
- return $y->bzero(@r) if $y->is_zero() && $x->{sign} eq '+';
+ # ? inf result is 0
+ return $y->bzero(@r) if ($x->is_inf('+') && !$y->is_inf()) || ($y->is_zero() && $x->{sign} eq '+');
+
+ # Y X
+ # != 0 -inf result is +- pi
+ if ($x->is_inf() || $y->is_inf())
+ {
+ # calculate PI
+ my $pi = $self->bpi(@r);
+ if ($y->is_inf())
+ {
+ # upgrade to BigRat etc.
+ return $upgrade->new($y)->batan2($upgrade->new($x),@r) if defined $upgrade;
+ if ($x->{sign} eq '-inf')
+ {
+ # calculate 3 pi/4
+ $MBI->_mul($pi->{_m}, $MBI->_new(3));
+ $MBI->_div($pi->{_m}, $MBI->_new(4));
+ }
+ elsif ($x->{sign} eq '+inf')
+ {
+ # calculate pi/4
+ $MBI->_div($pi->{_m}, $MBI->_new(4));
+ }
+ else
+ {
+ # calculate pi/2
+ $MBI->_div($pi->{_m}, $MBI->_new(2));
+ }
+ $y->{sign} = substr($y->{sign},0,1); # keep +/-
+ }
+ # modify $y in place
+ $y->{_m} = $pi->{_m};
+ $y->{_e} = $pi->{_e};
+ $y->{_es} = $pi->{_es};
+ # keep the sign of $y
+ return $y;
+ }
+
+ return $upgrade->new($y)->batan2($upgrade->new($x),@r) if defined $upgrade;
# Y X
# 0 -x result is PI
@@ -2859,7 +2897,7 @@
{
# calculate PI
my $pi = $self->bpi(@r);
- # modify $x in place
+ # modify $y in place
$y->{_m} = $pi->{_m};
$y->{_e} = $pi->{_e};
$y->{_es} = $pi->{_es};
@@ -2870,16 +2908,15 @@
# Y X
# +y 0 result is PI/2
# -y 0 result is -PI/2
- if ($y->is_inf() || $x->is_zero())
+ if ($x->is_zero())
{
# calculate PI/2
my $pi = $self->bpi(@r);
- # modify $x in place
+ # modify $y in place
$y->{_m} = $pi->{_m};
$y->{_e} = $pi->{_e};
$y->{_es} = $pi->{_es};
# -y => -PI/2, +y => PI/2
- $y->{sign} = substr($y->{sign},0,1); # +inf => +
$MBI->_div($y->{_m}, $MBI->_new(2));
return $y;
}
@@ -2918,7 +2955,7 @@
{
# 1,1 => PI/4
my $pi_4 = $self->bpi( $scale - 3);
- # modify $x in place
+ # modify $y in place
$y->{_m} = $pi_4->{_m};
$y->{_e} = $pi_4->{_e};
$y->{_es} = $pi_4->{_es};
@@ -3639,6 +3676,14 @@
return $x if $x->modify('as_number');
+ if (!$x->isa('Math::BigFloat'))
+ {
+ # if the object can as_number(), use it
+ return $x->as_number() if $x->can('as_number');
+ # otherwise, get us a float and then a number
+ $x = $x->can('as_float') ? $x->as_float() : $self->new(0+"$x");
+ }
+
my $z = $MBI->_copy($x->{_m});
if ($x->{_es} eq '-') # < 0
{
@@ -4146,14 +4191,19 @@
use Math::BigFloat lib => 'GMP';
+B<Note>: General purpose packages should not be explicit about the library
+to use; let the script author decide which is best.
+
Note: The keyword 'lib' will warn when the requested library could not be
loaded. To suppress the warning use 'try' instead:
use Math::BigFloat try => 'GMP';
-To turn the warning into a die(), use 'only' instead:
+If your script works with huge numbers and Calc is too slow for them,
+you can also for the loading of one of these libraries and if none
+of them can be used, the code will die:
- use Math::BigFloat only => 'GMP';
+ use Math::BigFloat only => 'GMP,Pari';
The following would first try to find Math::BigInt::Foo, then
Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
==== //depot/maint-5.8/perl/lib/Math/BigInt.pm#22 (text) ====
Index: perl/lib/Math/BigInt.pm
--- perl/lib/Math/BigInt.pm#21~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt.pm 2008-05-25 15:33:32.000000000 -0700
@@ -18,7 +18,7 @@
my $class = "Math::BigInt";
use 5.006;
-$VERSION = '1.88';
+$VERSION = '1.89';
@ISA = qw(Exporter);
@EXPORT_OK = qw(objectify bgcd blcm);
@@ -3000,11 +3000,47 @@
return $y->bnan() if ($y->{sign} eq $nan) || ($x->{sign} eq $nan);
- return $y->bzero() if $y->is_zero() && $x->{sign} eq '+'; # x >= 0
-
- # inf handling
- # +-inf => --PI/2 => +-1
- return $y->bone( substr($y->{sign},0,1) ) if $y->{sign} =~ /^[+-]inf$/;
+ # Y X
+ # != 0 -inf result is +- pi
+ if ($x->is_inf() || $y->is_inf())
+ {
+ # upgrade to BigFloat etc.
+ return $upgrade->new($y)->batan2($upgrade->new($x),@r) if defined $upgrade;
+ if ($y->is_inf())
+ {
+ if ($x->{sign} eq '-inf')
+ {
+ # calculate 3 pi/4 => 2.3.. => 2
+ $y->bone( substr($y->{sign},0,1) );
+ $y->bmul($self->new(2));
+ }
+ elsif ($x->{sign} eq '+inf')
+ {
+ # calculate pi/4 => 0.7 => 0
+ $y->bzero();
+ }
+ else
+ {
+ # calculate pi/2 => 1.5 => 1
+ $y->bone( substr($y->{sign},0,1) );
+ }
+ }
+ else
+ {
+ if ($x->{sign} eq '+inf')
+ {
+ # calculate pi/4 => 0.7 => 0
+ $y->bzero();
+ }
+ else
+ {
+ # PI => 3.1415.. => 3
+ $y->bone( substr($y->{sign},0,1) );
+ $y->bmul($self->new(3));
+ }
+ }
+ return $y;
+ }
return $upgrade->new($y)->batan2($upgrade->new($x),@r) if defined $upgrade;
@@ -3056,9 +3092,10 @@
use Math::BigInt;
- # or make it faster: install (optional) Math::BigInt::GMP
- # and always use (it will fall back to pure Perl if the
- # GMP library is not installed):
+ # or make it faster with huge numbers: install (optional)
+ # Math::BigInt::GMP and always use (it will fall back to
+ # pure Perl if the GMP library is not installed):
+ # (See also the L<MATH LIBRARY> section!)
# will warn if Math::BigInt::GMP cannot be found
use Math::BigInt lib => 'GMP';
@@ -3066,6 +3103,9 @@
# to supress the warning use this:
# use Math::BigInt try => 'GMP';
+ # dies if GMP cannot be loaded:
+ # use Math::BigInt only => 'GMP';
+
my $str = '1234567890';
my @values = (64,74,18);
my $n = 1; my $sign = '-';
@@ -4390,26 +4430,46 @@
Math with the numbers is done (by default) by a module called
C<Math::BigInt::Calc>. This is equivalent to saying:
- use Math::BigInt lib => 'Calc';
+ use Math::BigInt try => 'Calc';
+
+You can change this backend library by using:
-You can change this by using:
+ use Math::BigInt try => 'GMP';
- use Math::BigInt lib => 'BitVect';
+B<Note>: General purpose packages should not be explicit about the library
+to use; let the script author decide which is best.
+
+If your script works with huge numbers and Calc is too slow for them,
+you can also for the loading of one of these libraries and if none
+of them can be used, the code will die:
+
+ use Math::BigInt only => 'GMP,Pari';
The following would first try to find Math::BigInt::Foo, then
Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
- use Math::BigInt lib => 'Foo,Math::BigInt::Bar';
+ use Math::BigInt try => 'Foo,Math::BigInt::Bar';
+
+The library that is loaded last will be used. Note that this can be
+overwritten at any time by loading a different library, and numbers
+constructed with different libraries cannot be used in math operations
+together.
+
+=head3 What library to use?
-Since Math::BigInt::GMP is in almost all cases faster than Calc (especially in
-math involving really big numbers, where it is B<much> faster), and there is
-no penalty if Math::BigInt::GMP is not installed, it is a good idea to always
-use the following:
+B<Note>: General purpose packages should not be explicit about the library
+to use; let the script author decide which is best.
- use Math::BigInt lib => 'GMP';
+L<Math::BigInt::GMP> and L<Math::BigInt::Pari> are in cases involving big
+numbers much faster than Calc, however it is slower when dealing with very
+small numbers (less than about 20 digits) and when converting very large
+numbers to decimal (for instance for printing, rounding, calculating their
+length in decimal etc).
-Different low-level libraries use different formats to store the
-numbers. You should B<NOT> depend on the number having a specific format
+So please select carefully what libary you want to use.
+
+Different low-level libraries use different formats to store the numbers.
+However, you should B<NOT> depend on the number having a specific format
internally.
See the respective math library module documentation for further details.
@@ -4571,11 +4631,8 @@
=head2 Alternative math libraries
-You can use an alternative library to drive Math::BigInt via:
-
- use Math::BigInt lib => 'Module';
-
-See L<MATH LIBRARY> for more information.
+You can use an alternative library to drive Math::BigInt. See the section
+L<MATH LIBRARY> for more information.
For more benchmark results see L<http://bloodgate.com/perl/benchmarks.html>.
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/bare_mbf.t#14 (text) ====
Index: perl/lib/Math/BigInt/t/bare_mbf.t
--- perl/lib/Math/BigInt/t/bare_mbf.t#13~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/bare_mbf.t 2008-05-25 15:33:32.000000000 -0700
@@ -27,7 +27,7 @@
}
print "# INC = @INC\n";
- plan tests => 2292;
+ plan tests => 2308;
}
use Math::BigFloat lib => 'BareCalc';
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/bare_mbi.t#16 (text) ====
Index: perl/lib/Math/BigInt/t/bare_mbi.t
--- perl/lib/Math/BigInt/t/bare_mbi.t#15~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/bare_mbi.t 2008-05-25 15:33:32.000000000 -0700
@@ -26,7 +26,7 @@
}
print "# INC = @INC\n";
- plan tests => 3257;
+ plan tests => 3273;
}
use Math::BigInt lib => 'BareCalc';
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/bigfltpm.inc#16 (text) ====
Index: perl/lib/Math/BigInt/t/bigfltpm.inc
--- perl/lib/Math/BigInt/t/bigfltpm.inc#15~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/bigfltpm.inc 2008-05-25 15:33:32.000000000 -0700
@@ -450,6 +450,14 @@
1:NaN:10:NaN
inf:1:14:1.5707963267949
-inf:1:14:-1.5707963267949
+0:-inf:14:3.1415926535898
+-1:-inf:14:-3.1415926535898
+1:-inf:14:3.1415926535898
+0:inf:14:0
+inf:-inf:14:2.3561944901923
+-inf:-inf:14:-2.3561944901923
+inf:+inf:14:0.7853981633974
+-inf:+inf:14:-0.7853981633974
1:5:13:0.1973955598499
1:5:14:0.19739555984988
0:0:10:0
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/bigfltpm.t#13 (xtext) ====
Index: perl/lib/Math/BigInt/t/bigfltpm.t
--- perl/lib/Math/BigInt/t/bigfltpm.t#12~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/bigfltpm.t 2008-05-25 15:33:32.000000000 -0700
@@ -26,7 +26,7 @@
}
print "# INC = @INC\n";
- plan tests => 2292
+ plan tests => 2308
+ 5; # own tests
}
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/bigintpm.inc#17 (text) ====
Index: perl/lib/Math/BigInt/t/bigintpm.inc
--- perl/lib/Math/BigInt/t/bigintpm.inc#16~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/bigintpm.inc 2008-05-25 15:33:32.000000000 -0700
@@ -2304,6 +2304,15 @@
1:NaN:10:NaN
inf:1:14:1
-inf:1:14:-1
+0:-inf:14:3
+-1:-inf:14:-3
+1:-inf:14:3
+0:inf:14:0
+inf:-inf:14:2
+-inf:-inf:14:-2
+# +- 0.78....
+inf:+inf:14:0
+-inf:+inf:14:0
1:5:13:0
1:5:14:0
0:0:10:0
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/bigintpm.t#17 (xtext) ====
Index: perl/lib/Math/BigInt/t/bigintpm.t
--- perl/lib/Math/BigInt/t/bigintpm.t#16~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/bigintpm.t 2008-05-25 15:33:32.000000000 -0700
@@ -10,7 +10,7 @@
my $location = $0; $location =~ s/bigintpm.t//;
unshift @INC, $location; # to locate the testing files
chdir 't' if -d 't';
- plan tests => 3257 + 6;
+ plan tests => 3273 + 6;
}
use Math::BigInt lib => 'Calc';
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/calling.t#7 (text) ====
Index: perl/lib/Math/BigInt/t/calling.t
--- perl/lib/Math/BigInt/t/calling.t#6~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/calling.t 2008-05-25 15:33:32.000000000 -0700
@@ -32,11 +32,6 @@
print "# INC = @INC\n";
my $tests = 160;
plan tests => $tests;
- if ($] < 5.006)
- {
- for (1..$tests) { skip (1,'Not supported on older Perls'); }
- exit;
- }
}
package Math::BigInt::Test;
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/const_mbf.t#2 (text) ====
Index: perl/lib/Math/BigInt/t/const_mbf.t
--- perl/lib/Math/BigInt/t/const_mbf.t#1~21889~ 2003-12-13 07:55:57.000000000 -0800
+++ perl/lib/Math/BigInt/t/const_mbf.t 2008-05-25 15:33:32.000000000 -0700
@@ -29,11 +29,6 @@
print "# INC = @INC\n";
plan tests => 2;
- if ($] < 5.006)
- {
- for (1..2) { skip (1,'Not supported on older Perls'); }
- exit;
- }
}
use Math::BigFloat ':constant';
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/constant.t#4 (text) ====
Index: perl/lib/Math/BigInt/t/constant.t
--- perl/lib/Math/BigInt/t/constant.t#3~21889~ 2003-12-13 07:55:57.000000000 -0800
+++ perl/lib/Math/BigInt/t/constant.t 2008-05-25 15:33:32.000000000 -0700
@@ -27,11 +27,6 @@
print "# INC = @INC\n";
plan tests => 7;
- if ($] < 5.006)
- {
- for (1..7) { skip (1,'Not supported on older Perls'); }
- exit;
- }
}
use Math::BigInt ':constant';
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/mbimbf.t#6 (text) ====
Index: perl/lib/Math/BigInt/t/mbimbf.t
--- perl/lib/Math/BigInt/t/mbimbf.t#5~22558~ 2004-03-22 13:01:52.000000000 -0800
+++ perl/lib/Math/BigInt/t/mbimbf.t 2008-05-25 15:33:32.000000000 -0700
@@ -32,7 +32,7 @@
print "# INC = @INC\n";
plan tests => 684
- + 23; # own tests
+ + 26; # own tests
}
use Math::BigInt 1.70;
@@ -100,3 +100,11 @@
$x = $x->blog(Math::BigInt->new(10));
ok ($x,2);
+
+# bug until v1.88 for sqrt() with enough digits
+for my $i (80,88,100)
+ {
+ $x = Math::BigFloat->new("1." . ("0" x $i) . "1");
+ $x = $x->bsqrt;
+ ok ($x, 1);
+ }
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/sub_mbf.t#13 (xtext) ====
Index: perl/lib/Math/BigInt/t/sub_mbf.t
--- perl/lib/Math/BigInt/t/sub_mbf.t#12~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/sub_mbf.t 2008-05-25 15:33:32.000000000 -0700
@@ -26,7 +26,7 @@
}
print "# INC = @INC\n";
- plan tests => 2292
+ plan tests => 2308
+ 6; # + our own tests
}
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/sub_mbi.t#16 (xtext) ====
Index: perl/lib/Math/BigInt/t/sub_mbi.t
--- perl/lib/Math/BigInt/t/sub_mbi.t#15~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/sub_mbi.t 2008-05-25 15:33:32.000000000 -0700
@@ -26,7 +26,7 @@
}
print "# INC = @INC\n";
- plan tests => 3257
+ plan tests => 3273
+ 5; # +5 own tests
}
==== //depot/maint-5.8/perl/lib/Math/BigInt/t/with_sub.t#13 (text) ====
Index: perl/lib/Math/BigInt/t/with_sub.t
--- perl/lib/Math/BigInt/t/with_sub.t#12~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigInt/t/with_sub.t 2008-05-25 15:33:32.000000000 -0700
@@ -28,7 +28,7 @@
}
print "# INC = @INC\n";
- plan tests => 2292
+ plan tests => 2308
+ 1;
}
==== //depot/maint-5.8/perl/lib/Math/BigRat.pm#14 (text) ====
Index: perl/lib/Math/BigRat.pm
--- perl/lib/Math/BigRat.pm#13~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigRat.pm 2008-05-25 15:33:32.000000000 -0700
@@ -23,7 +23,7 @@
@ISA = qw(Math::BigFloat);
-$VERSION = '0.21';
+$VERSION = '0.22';
use overload; # inherit overload from Math::BigFloat
@@ -937,6 +937,13 @@
return $x->round(@r) if $x->is_zero(); # 0**y => 0 (if not y <= 0)
+ # shortcut if y == 1/N (is then sqrt() respective broot())
+ if ($MBI->_is_one($y->{_n}))
+ {
+ return $x->bsqrt(@r) if $MBI->_is_two($y->{_d}); # 1/2 => sqrt
+ return $x->broot($MBI->_str($y->{_d}),@r); # 1/N => root(N)
+ }
+
# shortcut y/1 (and/or x/1)
if ($MBI->_is_one($y->{_d}))
{
@@ -974,21 +981,18 @@
return $x->round(@r);
}
- # regular calculation (this is wrong for d/e ** f/g)
- my $pow2 = $self->bone();
- my $y1 = $MBI->_div ( $MBI->_copy($y->{_n}), $y->{_d});
- my $two = $MBI->_two();
-
- while (!$MBI->_is_one($y1))
- {
- $pow2->bmul($x) if $MBI->_is_odd($y1);
- $MBI->_div($y1, $two);
- $x->bmul($x);
- }
- $x->bmul($pow2) unless $pow2->is_one();
- # n ** -x => 1/n ** x
- ($x->{_d},$x->{_n}) = ($x->{_n},$x->{_d}) if $y->{sign} eq '-';
- $x->bnorm()->round(@r);
+# print STDERR "# $x $y\n";
+
+ # otherwise:
+
+ # n/d n ______________
+ # a/b = -\/ (a/b) ** d
+
+ # (a/b) ** n == (a ** n) / (b ** n)
+ $MBI->_pow($x->{_n}, $y->{_n} );
+ $MBI->_pow($x->{_d}, $y->{_n} );
+
+ return $x->broot($MBI->_str($y->{_d}),@r); # n/d => root(n)
}
sub blog
@@ -1020,21 +1024,21 @@
sub bexp
{
# set up parameters
- my ($self,$x,$y,$a,$p,$r) = (ref($_[0]),@_);
+ my ($self,$x,$y,@r) = (ref($_[0]),@_);
# objectify is costly, so avoid it
if ((!ref($_[0])) || (ref($_[0]) ne ref($_[1])))
{
- ($self,$x,$y,$a,$p,$r) = objectify(2,$class,@_);
+ ($self,$x,$y,@r) = objectify(2,$class,@_);
}
- return $x->binf() if $x->{sign} eq '+inf';
- return $x->bzero() if $x->{sign} eq '-inf';
+ return $x->binf(@r) if $x->{sign} eq '+inf';
+ return $x->bzero(@r) if $x->{sign} eq '-inf';
# we need to limit the accuracy to protect against overflow
my $fallback = 0;
my ($scale,@params);
- ($x,@params) = $x->_find_round_parameters($a,$p,$r);
+ ($x,@params) = $x->_find_round_parameters(@r);
# also takes care of the "error in _find_round_parameters?" case
return $x if $x->{sign} eq 'NaN';
@@ -1043,11 +1047,11 @@
if (scalar @params == 0)
{
# simulate old behaviour
- $params[0] = $self->div_scale(); # and round to it as accuracy
- $params[1] = undef; # P = undef
- $scale = $params[0]+4; # at least four more for proper round
- $params[2] = $r; # round mode by caller or undef
- $fallback = 1; # to clear a/p afterwards
+ $params[0] = $self->div_scale(); # and round to it as accuracy
+ $params[1] = undef; # P = undef
+ $scale = $params[0]+4; # at least four more for proper round
+ $params[2] = $r[2]; # round mode by caller or undef
+ $fallback = 1; # to clear a/p afterwards
}
else
{
@@ -1165,7 +1169,7 @@
if ($a != 0 || !$MBI->_is_one($x->{_d}))
{
# n/d
- return Math::BigFloat->new($x->{sign} . $MBI->_str($x->{_n}))->bdiv( $MBI->_str($x->{_d}), $x->accuracy());
+ return scalar Math::BigFloat->new($x->{sign} . $MBI->_str($x->{_n}))->bdiv( $MBI->_str($x->{_d}), $x->accuracy());
}
# just n
Math::BigFloat->new($x->{sign} . $MBI->_str($x->{_n}));
@@ -1187,7 +1191,7 @@
}
# do it with floats
- $x->_new_from_float( $x->_as_float()->broot($y,@r) );
+ $x->_new_from_float( $x->_as_float()->broot($y->_as_float(),@r) )->bnorm()->bround(@r);
}
sub bmodpow
@@ -1418,6 +1422,28 @@
$u;
}
+sub as_float
+ {
+ # return N/D as Math::BigFloat
+
+ # set up parameters
+ my ($self,$x,@r) = (ref($_[0]),@_);
+ # objectify is costly, so avoid it
+ ($self,$x,@r) = objectify(1,$class,@_) unless ref $_[0];
+
+ # NaN, inf etc
+ return Math::BigFloat->new($x->{sign}) if $x->{sign} !~ /^[+-]$/;
+
+ my $u = Math::BigFloat->bzero();
+ $u->{sign} = $x->{sign};
+ # n
+ $u->{_m} = $MBI->_copy($x->{_n});
+ $u->{_e} = $MBI->_zero();
+ $u->bdiv( $MBI->_str($x->{_d}), @r);
+ # return $u
+ $u;
+ }
+
sub as_bin
{
my ($self,$x) = ref($_[0]) ? (undef,$_[0]) : objectify(1,@_);
@@ -1655,7 +1681,7 @@
Returns the object as a scalar. This will lose some data if the object
cannot be represented by a normal Perl scalar (integer or float), so
-use as_int() instead.
+use L<as_int()> or L<as_float()> instead.
This routine is automatically used whenever a scalar is required:
@@ -1672,6 +1698,19 @@
C<as_number()> is an alias for C<as_int()>.
+=head2 as_float()
+
+ $x = Math::BigRat->new('13/7');
+ print $x->as_float(),"\n"; # '1'
+
+ $x = Math::BigRat->new('2/3');
+ print $x->as_float(5),"\n"; # '0.66667'
+
+Returns a copy of the object as BigFloat, preserving the
+accuracy as wanted, or the default of 40 digits.
+
+This method was added in v0.22 of Math::BigRat (April 2008).
+
=head2 as_hex()
$x = Math::BigRat->new('13');
@@ -1933,6 +1972,10 @@
works only for values that a marked with a C<RW> above, anything else is
read-only.
+=head2 objectify()
+
+This is an internal routine that turns scalars into objects.
+
=head1 BUGS
Some things are not yet implemented, or only implemented half-way:
@@ -1969,6 +2012,6 @@
=head1 AUTHORS
-(C) by Tels L<http://bloodgate.com/> 2001 - 2007.
+(C) by Tels L<http://bloodgate.com/> 2001 - 2008.
=cut
==== //depot/maint-5.8/perl/lib/Math/BigRat/t/biglog.t#2 (text) ====
Index: perl/lib/Math/BigRat/t/biglog.t
--- perl/lib/Math/BigRat/t/biglog.t#1~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigRat/t/biglog.t 2008-05-25 15:33:32.000000000 -0700
@@ -28,7 +28,7 @@
}
print "# INC = @INC\n";
- plan tests => 14;
+ plan tests => 17;
}
use Math::BigRat;
@@ -66,18 +66,18 @@
'90933395208605785401971970164779391644753259799242' . '/' .
'33452526613163807108170062053440751665152000000000',
'bexp(1)');
-#is ($cl->new(2)->bexp(40), $cl->new(1)->bexp(45)->bpow(2,40), 'bexp(2)');
+is ($cl->new(2)->bexp(1,40), $cl->new(1)->bexp(1,45)->bpow(2,40), 'bexp(2)');
-#is ($cl->new("12.5")->bexp(61), $cl->new(1)->bexp(65)->bpow(12.5,61), 'bexp(12.5)');
+is ($cl->new("12.5")->bexp(1,61), $cl->new(1)->bexp(1,65)->bpow(12.5,61), 'bexp(12.5)');
#############################################################################
# test bexp() with big values (non-cached)
-#is ($cl->new(1)->bexp(100),
-# '2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427',
-# 'bexp(100)');
+is ($cl->new(1)->bexp(1,100)->as_float(100),
+ '2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427',
+ 'bexp(100)');
-is ($cl->new("12.5")->bexp(91), $cl->new(1)->bexp(95)->bpow(12.5,91),
+is ($cl->new("12.5")->bexp(1,91), $cl->new(1)->bexp(1,95)->bpow(12.5,91),
'bexp(12.5) to 91 digits');
#############################################################################
==== //depot/maint-5.8/perl/lib/Math/BigRat/t/bigrat.t#10 (xtext) ====
Index: perl/lib/Math/BigRat/t/bigrat.t
--- perl/lib/Math/BigRat/t/bigrat.t#9~30541~ 2007-03-10 11:06:47.000000000 -0800
+++ perl/lib/Math/BigRat/t/bigrat.t 2008-05-25 15:33:32.000000000 -0700
@@ -8,7 +8,7 @@
$| = 1;
chdir 't' if -d 't';
unshift @INC, '../lib'; # for running manually
- plan tests => 193;
+ plan tests => 198;
}
# basic testing of Math::BigRat
@@ -197,8 +197,8 @@
$x = $cr->new('1/3'); $z = $x->bpow('4/1'); ok ($x,'1/81');
$x = $cr->new('2/3'); $z = $x->bpow('4/1'); ok ($x,'16/81');
-# XXX todo:
-#$x = $cr->new('2/3'); $z = $x->bpow('5/3'); ok ($x,'32/81 ???');
+$x = $cr->new('2/3'); $z = $x->bpow('5/3');
+ok ($x, '31797617848703662994667839220546583581/62500000000000000000000000000000000000');
##############################################################################
# bfac
@@ -279,7 +279,7 @@
# square root with exact result
$x = $cr->new('1.44');
-ok ($x->copy()->broot(2), '12/10');
+ok ($x->copy()->broot(2), '6/5');
ok (ref($x->copy()->broot(2)), $cr);
# log with exact result
@@ -312,6 +312,19 @@
ok ($x, '64', 'from_oct');
##############################################################################
+# as_float()
+
+$x = Math::BigRat->new('1/2'); my $f = $x->as_float();
+
+ok ($x, '1/2', '$x unmodified');
+ok ($f, '0.5', 'as_float(0.5)');
+
+$x = Math::BigRat->new('2/3'); $f = $x->as_float(5);
+
+ok ($x, '2/3', '$x unmodified');
+ok ($f, '0.66667', 'as_float(2/3,5)');
+
+##############################################################################
# done
1;
==== //depot/maint-5.8/perl/lib/Math/BigRat/t/bigroot.t#2 (text) ====
Index: perl/lib/Math/BigRat/t/bigroot.t
--- perl/lib/Math/BigRat/t/bigroot.t#1~32341~ 2007-11-16 11:45:53.000000000 -0800
+++ perl/lib/Math/BigRat/t/bigroot.t 2008-05-25 15:33:32.000000000 -0700
@@ -34,7 +34,7 @@
}
print "# INC = @INC\n";
- plan tests => 4 * 2;
+ plan tests => 8 * 2;
}
use Math::BigFloat;
@@ -46,11 +46,10 @@
# 2 ** 240 =
# 1766847064778384329583297500742918515827483896875618958121606201292619776
-# takes way too long
-#test_broot ('2','240', 8, undef, '1073741824');
-#test_broot ('2','240', 9, undef, '106528681.3099908308759836475139583940127');
-#test_broot ('2','120', 9, undef, '10321.27324073880096577298929482324664787');
-#test_broot ('2','120', 17, undef, '133.3268493632747279600707813049418888729');
+test_broot ('2','240', 8, undef, '1073741824');
+test_broot ('2','240', 9, undef, '106528681.3099908308759836475139583940127');
+test_broot ('2','120', 9, undef, '10321.27324073880096577298929482324664787');
+test_broot ('2','120', 17, undef, '133.3268493632747279600707813049418888729');
test_broot ('2','120', 8, undef, '32768');
test_broot ('2','60', 8, undef, '181.0193359837561662466161566988413540569');
==== //depot/maint-5.8/perl/lib/Math/BigRat/t/hang.t#1 (text) ====
Index: perl/lib/Math/BigRat/t/hang.t
--- /dev/null 2008-05-07 15:08:24.549929899 -0700
+++ perl/lib/Math/BigRat/t/hang.t 2008-05-25 15:33:32.000000000 -0700
@@ -0,0 +1,27 @@
+#!/usr/bin/perl -w
+
+# test for bug #34584: hang in exp(1/2)
+
+use strict;
+use Test::More;
+
+BEGIN
+ {
+ $| = 1;
+ chdir 't' if -d 't';
+ unshift @INC, '../lib'; # for running manually
+ plan tests => 1;
+ }
+
+use Math::BigRat;
+
+my $result = Math::BigRat->new('1/2')->bexp();
+
+is ("$result", "9535900335500879457687887524133067574481/5783815921445270815783609372070483523265",
+ "exp(1/2) worked");
+
+##############################################################################
+# done
+
+1;
+
==== //depot/maint-5.8/perl/lib/Math/Complex.pm#7 (text) ====
Index: perl/lib/Math/Complex.pm
--- perl/lib/Math/Complex.pm#6~33516~ 2008-03-13 12:37:42.000000000 -0700
+++ perl/lib/Math/Complex.pm 2008-05-25 15:33:32.000000000 -0700
@@ -7,9 +7,9 @@
package Math::Complex;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $Inf);
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $Inf $ExpInf);
-$VERSION = 1.52;
+$VERSION = 1.54;
use Config;
@@ -38,6 +38,7 @@
if ($^O eq 'unicosmk') {
$Inf = $DBL_MAX;
} else {
+ local $SIG{FPE} = { };
local $!;
# We do want an arithmetic overflow, Inf INF inf Infinity.
for my $t (
@@ -50,7 +51,6 @@
'INFINITY',
'1e99999',
) {
- local $SIG{FPE} = { };
local $^W = 0;
my $i = eval "$t+1.0";
if (defined $i && $i > $BIGGER_THAN_THIS) {
@@ -61,6 +61,7 @@
$Inf = $DBL_MAX unless defined $Inf; # Oh well, close enough.
die "Math::Complex: Could not get Infinity"
unless $Inf > $BIGGER_THAN_THIS;
+ $ExpInf = exp(99999);
}
# print "# On this machine, Inf = '$Inf'\n";
}
@@ -1101,7 +1102,7 @@
my $ex;
unless (ref $z) {
$ex = CORE::exp($z);
- return $ex ? ($ex + 1/$ex)/2 : Inf();
+ return $ex ? ($ex == $ExpInf ? Inf() : ($ex + 1/$ex)/2) : Inf();
}
my ($x, $y) = @{$z->_cartesian};
$ex = CORE::exp($x);
@@ -1121,7 +1122,7 @@
unless (ref $z) {
return 0 if $z == 0;
$ex = CORE::exp($z);
- return $ex ? ($ex - 1/$ex)/2 : -Inf();
+ return $ex ? ($ex == $ExpInf ? Inf() : ($ex - 1/$ex)/2) : -Inf();
}
my ($x, $y) = @{$z->_cartesian};
my $cy = CORE::cos($y);
@@ -1203,7 +1204,7 @@
#
# acosh
#
-# Computes the arc hyperbolic cosine acosh(z) = log(z + sqrt(z*z-1)).
+# Computes the area/inverse hyperbolic cosine acosh(z) = log(z + sqrt(z*z-1)).
#
sub acosh {
my ($z) = @_;
@@ -1231,7 +1232,7 @@
#
# asinh
#
-# Computes the arc hyperbolic sine asinh(z) = log(z + sqrt(z*z+1))
+# Computes the area/inverse hyperbolic sine asinh(z) = log(z + sqrt(z*z+1))
#
sub asinh {
my ($z) = @_;
@@ -1251,7 +1252,7 @@
#
# atanh
#
-# Computes the arc hyperbolic tangent atanh(z) = 1/2 log((1+z) / (1-z)).
+# Computes the area/inverse hyperbolic tangent atanh(z) = 1/2 log((1+z) / (1-z)).
#
sub atanh {
my ($z) = @_;
@@ -1267,7 +1268,7 @@
#
# asech
#
-# Computes the hyperbolic arc secant asech(z) = acosh(1 / z).
+# Computes the area/inverse hyperbolic secant asech(z) = acosh(1 / z).
#
sub asech {
my ($z) = @_;
@@ -1278,7 +1279,7 @@
#
# acsch
#
-# Computes the hyperbolic arc cosecant acsch(z) = asinh(1 / z).
+# Computes the area/inverse hyperbolic cosecant acsch(z) = asinh(1 / z).
#
sub acsch {
my ($z) = @_;
@@ -1296,7 +1297,7 @@
#
# acoth
#
-# Computes the arc hyperbolic cotangent acoth(z) = 1/2 log((1+z) / (z-1)).
+# Computes the area/inverse hyperbolic cotangent acoth(z) = 1/2 log((1+z) / (z-1)).
#
sub acoth {
my ($z) = @_;
==== //depot/maint-5.8/perl/lib/Math/Complex.t#7 (xtext) ====
Index: perl/lib/Math/Complex.t
--- perl/lib/Math/Complex.t#6~33516~ 2008-03-13 12:37:42.000000000 -0700
+++ perl/lib/Math/Complex.t 2008-05-25 15:33:32.000000000 -0700
@@ -13,7 +13,7 @@
}
}
-use Math::Complex 1.52;
+use Math::Complex 1.54;
use vars qw($VERSION);
==== //depot/maint-5.8/perl/lib/Math/Trig.pm#9 (text) ====
Index: perl/lib/Math/Trig.pm
--- perl/lib/Math/Trig.pm#8~33516~ 2008-03-13 12:37:42.000000000 -0700
+++ perl/lib/Math/Trig.pm 2008-05-25 15:33:32.000000000 -0700
@@ -10,14 +10,14 @@
use 5.005;
use strict;
-use Math::Complex 1.51;
+use Math::Complex 1.54;
use Math::Complex qw(:trig :pi);
use vars qw($VERSION $PACKAGE @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
@ISA = qw(Exporter);
-$VERSION = 1.16;
+$VERSION = 1.18;
my @angcnv = qw(rad2deg rad2grad
deg2rad deg2grad
@@ -181,7 +181,7 @@
return rad2rad($direction);
}
-*great_circle_bearing = \&great_circle_direction;
+*great_circle_bearing = \&great_circle_direction;
sub great_circle_waypoint {
my ( $theta0, $phi0, $theta1, $phi1, $point ) = @_;
@@ -208,7 +208,7 @@
my $theta = atan2($y, $x);
my $phi = acos_real($z);
-
+
return ($theta, $phi);
}
@@ -221,8 +221,9 @@
my $lat0 = pip2 - $phi0;
- my $phi1 = asin_real(sin($lat0)*cos($dst) +
+ my $phi1 = asin_real(sin($lat0)*cos($dst) +
cos($lat0)*sin($dst)*cos($dir0));
+
my $theta1 = $theta0 + atan2(sin($dir0)*sin($dst)*cos($lat0),
cos($dst)-sin($lat0)*sin($phi1));
@@ -308,12 +309,12 @@
B<csch>, B<cosech>, B<sech>, B<coth>, B<cotanh>
-The arcus (also known as the inverse) functions of the hyperbolic
+The area (also known as the inverse) functions of the hyperbolic
sine, cosine, and tangent
B<asinh>, B<acosh>, B<atanh>
-The arcus cofunctions of the hyperbolic sine, cosine, and tangent
+The area cofunctions of the hyperbolic sine, cosine, and tangent
(acsch/acosech and acoth/acotanh are aliases)
B<acsch>, B<acosech>, B<asech>, B<acoth>, B<acotanh>
@@ -589,18 +590,22 @@
straight north, pi or -pi straight south, pi/2 straight west, and
-pi/2 straight east.
+=head2 great_circle_destination
+
You can inversely compute the destination if you know the
starting point, direction, and distance:
-=head2 great_circle_destination
-
use Math::Trig 'great_circle_destination';
- # thetad and phid are the destination coordinates,
- # dird is the final direction at the destination.
+ # $diro is the original direction,
+ # for example from great_circle_bearing().
+ # $distance is the angular distance in radians,
+ # for example from great_circle_distance().
+ # $thetad and $phid are the destination coordinates,
+ # $dird is the final direction at the destination.
($thetad, $phid, $dird) =
- great_circle_destination($theta, $phi, $direction, $distance);
+ great_circle_destination($theta, $phi, $diro, $distance);
or the midpoint if you know the end points:
@@ -668,7 +673,18 @@
my @M = great_circle_midpoint(@L, @T);
-or about 68.93N 89.16E, in the frozen wastes of Siberia.
+or about 69 N 89 E, in the frozen wastes of Siberia.
+
+B<NOTE>: you B<cannot> get from A to B like this:
+
+ Dist = great_circle_distance(A, B)
+ Dir = great_circle_direction(A, B)
+ C = great_circle_destination(A, Dist, Dir)
+
+and expect C to be B, because the bearing constantly changes when
+going from A to B (except in some special case like the meridians or
+the circles of latitudes) and in great_circle_destination() one gives
+a constant bearing to follow.
=head2 CAVEAT FOR GREAT CIRCLE FORMULAS
==== //depot/maint-5.8/perl/lib/Math/Trig.t#8 (xtext) ====
Index: perl/lib/Math/Trig.t
--- perl/lib/Math/Trig.t#7~33516~ 2008-03-13 12:37:42.000000000 -0700
+++ perl/lib/Math/Trig.t 2008-05-25 15:33:32.000000000 -0700
@@ -28,8 +28,8 @@
plan(tests => 153);
-use Math::Trig 1.16;
-use Math::Trig 1.16 qw(:pi Inf);
+use Math::Trig 1.18;
+use Math::Trig 1.18 qw(:pi Inf);
my $pip2 = pi / 2;
@@ -312,7 +312,7 @@
my $BigDouble = 1e40;
# E.g. netbsd-alpha core dumps on Inf arith without this.
-local $SIG{FPE} = { };
+local $SIG{FPE} = sub { };
ok(Inf() > $BigDouble); # This passes in netbsd-alpha.
ok(Inf() + $BigDouble > $BigDouble); # This coredumps in netbsd-alpha.
==== //depot/maint-5.8/perl/lib/bigint.pm#11 (text) ====
Index: perl/lib/bigint.pm
--- perl/lib/bigint.pm#10~32347~ 2007-11-16 14:50:43.000000000 -0800
+++ perl/lib/bigint.pm 2008-05-25 15:33:32.000000000 -0700
@@ -1,7 +1,7 @@
package bigint;
-use 5.006002;
+use 5.006;
-$VERSION = '0.22';
+$VERSION = '0.23';
use Exporter;
@ISA = qw( Exporter );
@EXPORT_OK = qw( PI e bpi bexp );
==== //depot/maint-5.8/perl/lib/bignum.pm#11 (text) ====
Index: perl/lib/bignum.pm
--- perl/lib/bignum.pm#10~32347~ 2007-11-16 14:50:43.000000000 -0800
+++ perl/lib/bignum.pm 2008-05-25 15:33:32.000000000 -0700
@@ -1,7 +1,7 @@
package bignum;
-use 5.006002;
+use 5.006;
-$VERSION = '0.22';
+$VERSION = '0.23';
use Exporter;
@ISA = qw( bigint );
@EXPORT_OK = qw( PI e bexp bpi );
==== //depot/maint-5.8/perl/lib/bigrat.pm#10 (text) ====
Index: perl/lib/bigrat.pm
--- perl/lib/bigrat.pm#9~32347~ 2007-11-16 14:50:43.000000000 -0800
+++ perl/lib/bigrat.pm 2008-05-25 15:33:32.000000000 -0700
@@ -1,7 +1,7 @@
package bigrat;
-use 5.006002;
+use 5.006;
-$VERSION = '0.22';
+$VERSION = '0.23';
require Exporter;
@ISA = qw( bigint );
@EXPORT_OK = qw( PI e bpi bexp );
End of Patch.
-
Change 33930: Integrate:
by Nicholas Clark