summaryrefslogtreecommitdiff
path: root/lib/integer.pm
diff options
context:
space:
mode:
authorJohn L. Allen <allen@grumman.com>2001-03-13 11:14:02 -0500
committerJarkko Hietaniemi <jhi@iki.fi>2001-03-13 22:18:34 +0000
commita4e975fa7ff3ebf1726cad979025641a4f90a772 (patch)
tree4270a16d4ef1f87bb48e33e04257699cac6f9966 /lib/integer.pm
parentbd5f9747f98144062ee49ccbf7adfeb0cceeee68 (diff)
downloadperl-a4e975fa7ff3ebf1726cad979025641a4f90a772.tar.gz
Another patch for integer.pm POD
Message-ID: <Pine.SOL.3.91.1010313160755.1630A-100000@gateway.grumman.com> p4raw-id: //depot/perl@9128
Diffstat (limited to 'lib/integer.pm')
-rw-r--r--lib/integer.pm50
1 files changed, 30 insertions, 20 deletions
diff --git a/lib/integer.pm b/lib/integer.pm
index f720ce56d0..998574f0a7 100644
--- a/lib/integer.pm
+++ b/lib/integer.pm
@@ -1,7 +1,5 @@
package integer;
-our $VERSION = '1.00';
-
=head1 NAME
integer - Perl pragma to use integer arithmetic instead of floating point
@@ -19,25 +17,34 @@ of the enclosing BLOCK. On many machines, this doesn't matter a great
deal for most computations, but on those without floating point
hardware, it can make a big difference in performance.
-Note that this only affects how certain operators handle their operands
-and results, and not all numbers everywhere. Specifically, C<use
-integer;> has the effect that before computing the result of X + Y, X -
-Y, X / Y, X * Y, X % Y, or -X (unary minus), the operands X and Y have
-their fractional portions truncated, and the result will have its
-fractional portion truncated as well. For example, this code
+Note that this only affects how most of the arithmetic and relational
+B<operators> handle their operands and results, and B<not> how all
+numbers everywhere are treated. Specifically, C<use integer;> has the
+effect that before computing the results of the arithmetic operators
+(+, -, *, /, %, +=, -=, *=, /=, %=, and unary minus), the comparison
+operators (<, <=, >, >=, ==, !=, <=>), and the bitwise operators (|, &,
+^, <<, >>, |=, &=, ^=, <<=, >>=), the operands have their fractional
+portions truncated (or floored), and the result will have its
+fractional portion truncated as well. In addition, the range of
+operands and results is restricted to that of familiar two's complement
+integers, i.e., -(2**31) .. (2**31-1) on 32-bit architectures, and
+-(2**63) .. (2**63-1) on 64-bit architectures. For example, this code
use integer;
$x = 5.8;
$y = 2.5;
+ $z = 2.7;
+ $a = 2**31 - 1; # Largest positive integer on 32-bit machines
$, = ", ";
- print $x, -$x, $x + $y, $x - $y, $x / $y, $x * $y;
+ print $x, -$x, $x + $y, $x - $y, $x / $y, $x * $y, $y == $z, $a, $a + 1;
-will print: 5.8, -5, 7, 3, 2, 10
+will print: 5.8, -5, 7, 3, 2, 10, 1, 2147483647, -2147483648
Note that $x is still printed as having its true non-integer value of
-5.8 since it wasn't operated on. Also, arguments passed to functions
-and the values returned by them are not affected by C<use integer;>.
-E.g.,
+5.8 since it wasn't operated on. And note too the wrap-around from the
+largest positive integer to the largest negative one. Also, arguments
+passed to functions and the values returned by them are B<not> affected
+by C<use integer;>. E.g.,
srand(1.5);
$, = ", ";
@@ -45,13 +52,16 @@ E.g.,
will give the same result with or without C<use integer;> The power
operator C<**> is also not affected, so that 2 ** .5 is always the
-square root of 2.
+square root of 2. Now, it so happens that the pre- and post- increment
+and decrement operators, ++ and --, are not affected by C<use integer;>
+either. Some may rightly consider this to be a bug -- but at least it's
+a long-standing one.
-Finally, C<use integer;> also has an affect on the bitwise operators
-"&", "|", "^", "~", "<<", and ">>". Normally, the operands and results
-are treated as unsigned integers, but with C<use integer;> the operands
-and results are signed. This means, among other things, that ~0 is -1,
-and -2 & -5 is -6.
+Finally, C<use integer;> also has an additional affect on the bitwise
+operators. Normally, the operands and results are treated as
+B<unsigned> integers, but with C<use integer;> the operands and results
+are B<signed>. This means, among other things, that ~0 is -1, and -2 &
+-5 is -6.
Internally, native integer arithmetic (as provided by your C compiler)
is used. This means that Perl's own semantics for arithmetic
@@ -64,7 +74,7 @@ may do another.
% perl -Minteger -le 'print (4 % -3)'
1
-See L<perlmod/Pragmatic Modules>.
+See L<perlmodlib/"Pragmatic Modules">, L<perlop/"Integer Arithmetic">
=cut