summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3/integer.3perl
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man3/integer.3perl')
-rw-r--r--upstream/archlinux/man3/integer.3perl142
1 files changed, 142 insertions, 0 deletions
diff --git a/upstream/archlinux/man3/integer.3perl b/upstream/archlinux/man3/integer.3perl
new file mode 100644
index 00000000..8b42e5f4
--- /dev/null
+++ b/upstream/archlinux/man3/integer.3perl
@@ -0,0 +1,142 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "integer 3perl"
+.TH integer 3perl 2024-02-11 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+integer \- Perl pragma to use integer arithmetic instead of floating point
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 3
+\& use integer;
+\& $x = 10/3;
+\& # $x is now 3, not 3.33333333333333333
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This tells the compiler to use integer operations from here to the end
+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.
+.PP
+Note that this only affects how most of the arithmetic and relational
+\&\fBoperators\fR handle their operands and results, and \fBnot\fR how all
+numbers everywhere are treated. Specifically, \f(CW\*(C`use integer;\*(C'\fR 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
+.PP
+.Vb 7
+\& 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, $y==$z, $a, $a+1;
+.Ve
+.PP
+will print: 5.8, \-5, 7, 3, 2, 10, 1, 2147483647, \-2147483648
+.PP
+Note that \f(CW$x\fR is still printed as having its true non-integer value of
+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 \fBnot\fR affected
+by \f(CW\*(C`use integer;\*(C'\fR. E.g.,
+.PP
+.Vb 3
+\& srand(1.5);
+\& $, = ", ";
+\& print sin(.5), cos(.5), atan2(1,2), sqrt(2), rand(10);
+.Ve
+.PP
+will give the same result with or without \f(CW\*(C`use integer;\*(C'\fR The power
+operator \f(CW\*(C`**\*(C'\fR is also not affected, so that 2 ** .5 is always the
+square root of 2. Now, it so happens that the pre\- and post\- increment
+and decrement operators, ++ and \-\-, are not affected by \f(CW\*(C`use integer;\*(C'\fR
+either. Some may rightly consider this to be a bug \-\- but at least it's
+a long-standing one.
+.PP
+Finally, \f(CW\*(C`use integer;\*(C'\fR also has an additional affect on the bitwise
+operators. Normally, the operands and results are treated as
+\&\fBunsigned\fR integers, but with \f(CW\*(C`use integer;\*(C'\fR the operands and results
+are \fBsigned\fR. This means, among other things, that ~0 is \-1, and \-2 &
+\&\-5 is \-6.
+.PP
+Internally, native integer arithmetic (as provided by your C compiler)
+is used. This means that Perl's own semantics for arithmetic
+operations may not be preserved. One common source of trouble is the
+modulus of negative numbers, which Perl does one way, but your hardware
+may do another.
+.PP
+.Vb 4
+\& % perl \-le \*(Aqprint (4 % \-3)\*(Aq
+\& \-2
+\& % perl \-Minteger \-le \*(Aqprint (4 % \-3)\*(Aq
+\& 1
+.Ve
+.PP
+See "Pragmatic Modules" in perlmodlib, "Integer Arithmetic" in perlop