diff options
author | Peter John Acklam <pjacklam@online.no> | 2011-03-07 11:45:38 +0100 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-06-11 12:14:25 -0700 |
commit | 7833bfdd94cb7b5afbbc1b18e75e664482f529d5 (patch) | |
tree | a415ddbaf2b70fb787243d402b707555d000baf8 /dist | |
parent | 074ededac3b0d3c126e0affff0c86afc1257e665 (diff) | |
download | perl-7833bfdd94cb7b5afbbc1b18e75e664482f529d5.tar.gz |
Add sign function bsgn() as a complement to babs().
This is the standard mathematical signum function. It sets the
invocand to -1, 0, or 1, if it is real, and NaN otherwise.
Documentation and tests are included.
Diffstat (limited to 'dist')
-rw-r--r-- | dist/Math-BigInt/lib/Math/BigInt.pm | 13 | ||||
-rw-r--r-- | dist/Math-BigInt/t/bare_mbi.t | 2 | ||||
-rw-r--r-- | dist/Math-BigInt/t/bigintpm.inc | 9 | ||||
-rw-r--r-- | dist/Math-BigInt/t/bigintpm.t | 2 | ||||
-rw-r--r-- | dist/Math-BigInt/t/sub_mbi.t | 2 |
5 files changed, 24 insertions, 4 deletions
diff --git a/dist/Math-BigInt/lib/Math/BigInt.pm b/dist/Math-BigInt/lib/Math/BigInt.pm index 62c021ecf7..796b75aba1 100644 --- a/dist/Math-BigInt/lib/Math/BigInt.pm +++ b/dist/Math-BigInt/lib/Math/BigInt.pm @@ -1013,6 +1013,18 @@ sub babs $x; } +sub bsgn { + # Signum function. + + my $self = shift; + + return $self if $self->modify('bsgn'); + + return $self -> bone("+") if $self -> is_pos(); + return $self -> bone("-") if $self -> is_neg(); + return $self; # zero or NaN +} + sub bneg { # (BINT or num_str) return BINT @@ -3310,6 +3322,7 @@ Math::BigInt - Arbitrary size integer/float math package $x->bneg(); # negation $x->babs(); # absolute value + $x->bsgn(); # sign function (-1, 0, 1, or NaN) $x->bnorm(); # normalize (no-op in BigInt) $x->bnot(); # two's complement (bit wise not) $x->binc(); # increment $x by 1 diff --git a/dist/Math-BigInt/t/bare_mbi.t b/dist/Math-BigInt/t/bare_mbi.t index d7139dd1a6..9f2198b1b9 100644 --- a/dist/Math-BigInt/t/bare_mbi.t +++ b/dist/Math-BigInt/t/bare_mbi.t @@ -1,7 +1,7 @@ #!/usr/bin/perl -w use strict; -use Test::More tests => 3623; +use Test::More tests => 3635; BEGIN { unshift @INC, 't'; } diff --git a/dist/Math-BigInt/t/bigintpm.inc b/dist/Math-BigInt/t/bigintpm.inc index e52a2713d3..478584bc4e 100644 --- a/dist/Math-BigInt/t/bigintpm.inc +++ b/dist/Math-BigInt/t/bigintpm.inc @@ -73,7 +73,7 @@ while (<DATA>) } elsif ($f eq "bone") { $try .= "\$x->bone('$args[1]');"; # some unary ops - } elsif ($f =~ /^b(nan|floor|ceil|sstr|neg|abs|inc|dec|not|sqrt|fac)$/) { + } elsif ($f =~ /^b(nan|floor|ceil|sstr|neg|abs|sgn|inc|dec|not|sqrt|fac)$/) { $try .= "\$x->$f();"; } elsif ($f =~ /^(numify|length|stringify|as_hex|as_bin)$/) { $try .= "\$x->$f();"; @@ -1222,6 +1222,13 @@ babsNaN:NaN -1:1 +123456789:123456789 -123456789:123456789 +&bsgn +NaN:NaN ++inf:1 +-inf:-1 +0:0 ++123456789:1 +-123456789:-1 &bcmp bcmpNaN:bcmpNaN: bcmpNaN:0: diff --git a/dist/Math-BigInt/t/bigintpm.t b/dist/Math-BigInt/t/bigintpm.t index cacdb8e2ec..6ee3eff67b 100644 --- a/dist/Math-BigInt/t/bigintpm.t +++ b/dist/Math-BigInt/t/bigintpm.t @@ -1,7 +1,7 @@ #!/usr/bin/perl -w use strict; -use Test::More tests => 3623 + 6; +use Test::More tests => 3635 + 6; use Math::BigInt lib => 'Calc'; diff --git a/dist/Math-BigInt/t/sub_mbi.t b/dist/Math-BigInt/t/sub_mbi.t index 668fd1979e..6a3cecca17 100644 --- a/dist/Math-BigInt/t/sub_mbi.t +++ b/dist/Math-BigInt/t/sub_mbi.t @@ -1,7 +1,7 @@ #!/usr/bin/perl -w use strict; -use Test::More tests => 3623 +use Test::More tests => 3635 + 5; # +5 own tests BEGIN { unshift @INC, 't'; } |