diff options
author | John L. Allen <allen@grumman.com> | 2001-03-13 11:14:02 -0500 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-03-13 22:18:34 +0000 |
commit | a4e975fa7ff3ebf1726cad979025641a4f90a772 (patch) | |
tree | 4270a16d4ef1f87bb48e33e04257699cac6f9966 /lib/integer.pm | |
parent | bd5f9747f98144062ee49ccbf7adfeb0cceeee68 (diff) | |
download | perl-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.pm | 50 |
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 |