summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3/bigfloat.3perl
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man3/bigfloat.3perl')
-rw-r--r--upstream/archlinux/man3/bigfloat.3perl507
1 files changed, 507 insertions, 0 deletions
diff --git a/upstream/archlinux/man3/bigfloat.3perl b/upstream/archlinux/man3/bigfloat.3perl
new file mode 100644
index 00000000..8c1648df
--- /dev/null
+++ b/upstream/archlinux/man3/bigfloat.3perl
@@ -0,0 +1,507 @@
+.\" -*- 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 "bigfloat 3perl"
+.TH bigfloat 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
+bigfloat \- transparent big floating point number support for Perl
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& use bigfloat;
+\&
+\& $x = 2 + 4.5; # Math::BigFloat 6.5
+\& print 2 ** 512 * 0.1; # Math::BigFloat 134...09.6
+\& print inf + 42; # Math::BigFloat inf
+\& print NaN * 7; # Math::BigFloat NaN
+\& print hex("0x1234567890123490"); # Perl v5.10.0 or later
+\&
+\& {
+\& no bigfloat;
+\& print 2 ** 256; # a normal Perl scalar now
+\& }
+\&
+\& # for older Perls, import into current package:
+\& use bigfloat qw/hex oct/;
+\& print hex("0x1234567890123490");
+\& print oct("01234567890123490");
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+All numeric literals in the given scope are converted to Math::BigFloat objects.
+.PP
+All operators (including basic math operations) except the range operator \f(CW\*(C`..\*(C'\fR
+are overloaded.
+.PP
+So, the following:
+.PP
+.Vb 2
+\& use bigfloat;
+\& $x = 1234;
+.Ve
+.PP
+creates a Math::BigFloat and stores a reference to in \f(CW$x\fR. This happens
+transparently and behind your back, so to speak.
+.PP
+You can see this with the following:
+.PP
+.Vb 1
+\& perl \-Mbigfloat \-le \*(Aqprint ref(1234)\*(Aq
+.Ve
+.PP
+Since numbers are actually objects, you can call all the usual methods from
+Math::BigFloat on them. This even works to some extent on expressions:
+.PP
+.Vb 4
+\& perl \-Mbigfloat \-le \*(Aq$x = 1234; print $x\->bdec()\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint 1234\->copy()\->binc();\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint 1234\->copy()\->binc\->badd(6);\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint +(1234)\->copy()\->binc()\*(Aq
+.Ve
+.PP
+(Note that print doesn't do what you expect if the expression starts with
+\&'(' hence the \f(CW\*(C`+\*(C'\fR)
+.PP
+You can even chain the operations together as usual:
+.PP
+.Vb 2
+\& perl \-Mbigfloat \-le \*(Aqprint 1234\->copy()\->binc\->badd(6);\*(Aq
+\& 1241
+.Ve
+.PP
+Please note the following does not work as expected (prints nothing), since
+overloading of '..' is not yet possible in Perl (as of v5.8.0):
+.PP
+.Vb 1
+\& perl \-Mbigfloat \-le \*(Aqfor (1..2) { print ref($_); }\*(Aq
+.Ve
+.SS Options
+.IX Subsection "Options"
+\&\f(CW\*(C`bigfloat\*(C'\fR recognizes some options that can be passed while loading it via via
+\&\f(CW\*(C`use\*(C'\fR. The following options exist:
+.IP "a or accuracy" 4
+.IX Item "a or accuracy"
+This sets the accuracy for all math operations. The argument must be greater
+than or equal to zero. See Math::BigInt's \fBbround()\fR method for details.
+.Sp
+.Vb 1
+\& perl \-Mbigfloat=a,50 \-le \*(Aqprint sqrt(20)\*(Aq
+.Ve
+.Sp
+Note that setting precision and accuracy at the same time is not possible.
+.IP "p or precision" 4
+.IX Item "p or precision"
+This sets the precision for all math operations. The argument can be any
+integer. Negative values mean a fixed number of digits after the dot, while a
+positive value rounds to this digit left from the dot. 0 means round to integer.
+See Math::BigInt's \fBbfround()\fR method for details.
+.Sp
+.Vb 1
+\& perl \-Mbigfloat=p,\-50 \-le \*(Aqprint sqrt(20)\*(Aq
+.Ve
+.Sp
+Note that setting precision and accuracy at the same time is not possible.
+.IP "t or trace" 4
+.IX Item "t or trace"
+This enables a trace mode and is primarily for debugging.
+.IP "l, lib, try, or only" 4
+.IX Item "l, lib, try, or only"
+Load a different math lib, see "Math Library".
+.Sp
+.Vb 4
+\& perl \-Mbigfloat=l,GMP \-e \*(Aqprint 2 ** 512\*(Aq
+\& perl \-Mbigfloat=lib,GMP \-e \*(Aqprint 2 ** 512\*(Aq
+\& perl \-Mbigfloat=try,GMP \-e \*(Aqprint 2 ** 512\*(Aq
+\& perl \-Mbigfloat=only,GMP \-e \*(Aqprint 2 ** 512\*(Aq
+.Ve
+.IP hex 4
+.IX Item "hex"
+Override the built-in \fBhex()\fR method with a version that can handle big numbers.
+This overrides it by exporting it to the current package. Under Perl v5.10.0 and
+higher, this is not so necessary, as \fBhex()\fR is lexically overridden in the
+current scope whenever the \f(CW\*(C`bigfloat\*(C'\fR pragma is active.
+.IP oct 4
+.IX Item "oct"
+Override the built-in \fBoct()\fR method with a version that can handle big numbers.
+This overrides it by exporting it to the current package. Under Perl v5.10.0 and
+higher, this is not so necessary, as \fBoct()\fR is lexically overridden in the
+current scope whenever the \f(CW\*(C`bigfloat\*(C'\fR pragma is active.
+.IP "v or version" 4
+.IX Item "v or version"
+this prints out the name and version of the modules and then exits.
+.Sp
+.Vb 1
+\& perl \-Mbigfloat=v
+.Ve
+.SS "Math Library"
+.IX Subsection "Math Library"
+Math with the numbers is done (by default) by a backend library module called
+Math::BigInt::Calc. The default is equivalent to saying:
+.PP
+.Vb 1
+\& use bigfloat lib => \*(AqCalc\*(Aq;
+.Ve
+.PP
+you can change this by using:
+.PP
+.Vb 1
+\& use bigfloat lib => \*(AqGMP\*(Aq;
+.Ve
+.PP
+The following would first try to find Math::BigInt::Foo, then Math::BigInt::Bar,
+and if this also fails, revert to Math::BigInt::Calc:
+.PP
+.Vb 1
+\& use bigfloat lib => \*(AqFoo,Math::BigInt::Bar\*(Aq;
+.Ve
+.PP
+Using c<lib> warns if none of the specified libraries can be found and
+Math::BigInt fell back to one of the default libraries. To suppress this
+warning, use c<try> instead:
+.PP
+.Vb 1
+\& use bigfloat try => \*(AqGMP\*(Aq;
+.Ve
+.PP
+If you want the code to die instead of falling back, use \f(CW\*(C`only\*(C'\fR instead:
+.PP
+.Vb 1
+\& use bigfloat only => \*(AqGMP\*(Aq;
+.Ve
+.PP
+Please see respective module documentation for further details.
+.SS "Method calls"
+.IX Subsection "Method calls"
+Since all numbers are now objects, you can use all methods that are part of the
+Math::BigFloat API.
+.PP
+But a warning is in order. When using the following to make a copy of a number,
+only a shallow copy will be made.
+.PP
+.Vb 2
+\& $x = 9; $y = $x;
+\& $x = $y = 7;
+.Ve
+.PP
+Using the copy or the original with overloaded math is okay, e.g., the following
+work:
+.PP
+.Vb 2
+\& $x = 9; $y = $x;
+\& print $x + 1, " ", $y,"\en"; # prints 10 9
+.Ve
+.PP
+but calling any method that modifies the number directly will result in \fBboth\fR
+the original and the copy being destroyed:
+.PP
+.Vb 2
+\& $x = 9; $y = $x;
+\& print $x\->badd(1), " ", $y,"\en"; # prints 10 10
+\&
+\& $x = 9; $y = $x;
+\& print $x\->binc(1), " ", $y,"\en"; # prints 10 10
+\&
+\& $x = 9; $y = $x;
+\& print $x\->bmul(2), " ", $y,"\en"; # prints 18 18
+.Ve
+.PP
+Using methods that do not modify, but test that the contents works:
+.PP
+.Vb 2
+\& $x = 9; $y = $x;
+\& $z = 9 if $x\->is_zero(); # works fine
+.Ve
+.PP
+See the documentation about the copy constructor and \f(CW\*(C`=\*(C'\fR in overload, as well
+as the documentation in Math::BigFloat for further details.
+.SS Methods
+.IX Subsection "Methods"
+.IP \fBinf()\fR 4
+.IX Item "inf()"
+A shortcut to return Math::BigFloat\->\fBbinf()\fR. Useful because Perl does not always
+handle bareword \f(CW\*(C`inf\*(C'\fR properly.
+.IP \fBNaN()\fR 4
+.IX Item "NaN()"
+A shortcut to return Math::BigFloat\->\fBbnan()\fR. Useful because Perl does not always
+handle bareword \f(CW\*(C`NaN\*(C'\fR properly.
+.IP e 4
+.IX Item "e"
+.Vb 1
+\& # perl \-Mbigfloat=e \-wle \*(Aqprint e\*(Aq
+.Ve
+.Sp
+Returns Euler's number \f(CW\*(C`e\*(C'\fR, aka \fBexp\fR\|(1)
+.IP PI 4
+.IX Item "PI"
+.Vb 1
+\& # perl \-Mbigfloat=PI \-wle \*(Aqprint PI\*(Aq
+.Ve
+.Sp
+Returns PI.
+.IP \fBbexp()\fR 4
+.IX Item "bexp()"
+.Vb 1
+\& bexp($power, $accuracy);
+.Ve
+.Sp
+Returns Euler's number \f(CW\*(C`e\*(C'\fR raised to the appropriate power, to the wanted
+accuracy.
+.Sp
+Example:
+.Sp
+.Vb 1
+\& # perl \-Mbigfloat=bexp \-wle \*(Aqprint bexp(1,80)\*(Aq
+.Ve
+.IP \fBbpi()\fR 4
+.IX Item "bpi()"
+.Vb 1
+\& bpi($accuracy);
+.Ve
+.Sp
+Returns PI to the wanted accuracy.
+.Sp
+Example:
+.Sp
+.Vb 1
+\& # perl \-Mbigfloat=bpi \-wle \*(Aqprint bpi(80)\*(Aq
+.Ve
+.IP \fBaccuracy()\fR 4
+.IX Item "accuracy()"
+Set or get the accuracy.
+.IP \fBprecision()\fR 4
+.IX Item "precision()"
+Set or get the precision.
+.IP \fBround_mode()\fR 4
+.IX Item "round_mode()"
+Set or get the rounding mode.
+.IP \fBdiv_scale()\fR 4
+.IX Item "div_scale()"
+Set or get the division scale.
+.IP \fBupgrade()\fR 4
+.IX Item "upgrade()"
+Set or get the class that the downgrade class upgrades to, if any. Set the
+upgrade class to \f(CW\*(C`undef\*(C'\fR to disable upgrading.
+.Sp
+Upgrading is disabled by default.
+.IP \fBdowngrade()\fR 4
+.IX Item "downgrade()"
+Set or get the class that the upgrade class downgrades to, if any. Set the
+downgrade class to \f(CW\*(C`undef\*(C'\fR to disable upgrading.
+.Sp
+Downgrading is disabled by default.
+.IP \fBin_effect()\fR 4
+.IX Item "in_effect()"
+.Vb 1
+\& use bigfloat;
+\&
+\& print "in effect\en" if bigfloat::in_effect; # true
+\& {
+\& no bigfloat;
+\& print "in effect\en" if bigfloat::in_effect; # false
+\& }
+.Ve
+.Sp
+Returns true or false if \f(CW\*(C`bigfloat\*(C'\fR is in effect in the current scope.
+.Sp
+This method only works on Perl v5.9.4 or later.
+.SH CAVEATS
+.IX Header "CAVEATS"
+.IP "Hexadecimal, octal, and binary floating point literals" 4
+.IX Item "Hexadecimal, octal, and binary floating point literals"
+Perl (and this module) accepts hexadecimal, octal, and binary floating point
+literals, but use them with care with Perl versions before v5.32.0, because some
+versions of Perl silently give the wrong result.
+.IP "Operator vs literal overloading" 4
+.IX Item "Operator vs literal overloading"
+\&\f(CW\*(C`bigrat\*(C'\fR works by overloading handling of integer and floating point literals,
+converting them to Math::BigRat objects.
+.Sp
+This means that arithmetic involving only string values or string literals are
+performed using Perl's built-in operators.
+.Sp
+For example:
+.Sp
+.Vb 4
+\& use bigrat;
+\& my $x = "900000000000000009";
+\& my $y = "900000000000000007";
+\& print $x \- $y;
+.Ve
+.Sp
+outputs \f(CW0\fR on default 32\-bit builds, since \f(CW\*(C`bigfloat\*(C'\fR never sees the string
+literals. To ensure the expression is all treated as \f(CW\*(C`Math::BigFloat\*(C'\fR objects,
+use a literal number in the expression:
+.Sp
+.Vb 1
+\& print +(0+$x) \- $y;
+.Ve
+.IP Ranges 4
+.IX Item "Ranges"
+Perl does not allow overloading of ranges, so you can neither safely use ranges
+with \f(CW\*(C`bigfloat\*(C'\fR endpoints, nor is the iterator variable a \f(CW\*(C`Math::BigFloat\*(C'\fR.
+.Sp
+.Vb 7
+\& use 5.010;
+\& for my $i (12..13) {
+\& for my $j (20..21) {
+\& say $i ** $j; # produces a floating\-point number,
+\& # not an object
+\& }
+\& }
+.Ve
+.IP \fBin_effect()\fR 4
+.IX Item "in_effect()"
+This method only works on Perl v5.9.4 or later.
+.IP \fBhex()\fR/\fBoct()\fR 4
+.IX Item "hex()/oct()"
+\&\f(CW\*(C`bigfloat\*(C'\fR overrides these routines with versions that can also handle big
+integer values. Under Perl prior to version v5.9.4, however, this will not
+happen unless you specifically ask for it with the two import tags "hex" and
+"oct" \- and then it will be global and cannot be disabled inside a scope with
+\&\f(CW\*(C`no bigfloat\*(C'\fR:
+.Sp
+.Vb 1
+\& use bigfloat qw/hex oct/;
+\&
+\& print hex("0x1234567890123456");
+\& {
+\& no bigfloat;
+\& print hex("0x1234567890123456");
+\& }
+.Ve
+.Sp
+The second call to \fBhex()\fR will warn about a non-portable constant.
+.Sp
+Compare this to:
+.Sp
+.Vb 1
+\& use bigfloat;
+\&
+\& # will warn only under Perl older than v5.9.4
+\& print hex("0x1234567890123456");
+.Ve
+.SH EXAMPLES
+.IX Header "EXAMPLES"
+Some cool command line examples to impress the Python crowd ;)
+.PP
+.Vb 10
+\& perl \-Mbigfloat \-le \*(Aqprint sqrt(33)\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint 2**255\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint 4.5+2**255\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint 3/7 + 5/7 + 8/3\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint 123\->is_odd()\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint log(2)\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint exp(1)\*(Aq
+\& perl \-Mbigfloat \-le \*(Aqprint 2 ** 0.5\*(Aq
+\& perl \-Mbigfloat=a,65 \-le \*(Aqprint 2 ** 0.2\*(Aq
+\& perl \-Mbigfloat=l,GMP \-le \*(Aqprint 7 ** 7777\*(Aq
+.Ve
+.SH BUGS
+.IX Header "BUGS"
+Please report any bugs or feature requests to
+\&\f(CW\*(C`bug\-bignum at rt.cpan.org\*(C'\fR, or through the web interface at
+<https://rt.cpan.org/Ticket/Create.html?Queue=bignum> (requires login).
+We will be notified, and then you'll automatically be notified of
+progress on your bug as I make changes.
+.SH SUPPORT
+.IX Header "SUPPORT"
+You can find documentation for this module with the perldoc command.
+.PP
+.Vb 1
+\& perldoc bigfloat
+.Ve
+.PP
+You can also look for information at:
+.IP \(bu 4
+GitHub
+.Sp
+<https://github.com/pjacklam/p5\-bignum>
+.IP \(bu 4
+RT: CPAN's request tracker
+.Sp
+<https://rt.cpan.org/Dist/Display.html?Name=bignum>
+.IP \(bu 4
+MetaCPAN
+.Sp
+<https://metacpan.org/release/bignum>
+.IP \(bu 4
+CPAN Testers Matrix
+.Sp
+<http://matrix.cpantesters.org/?dist=bignum>
+.IP \(bu 4
+CPAN Ratings
+.Sp
+<https://cpanratings.perl.org/dist/bignum>
+.SH LICENSE
+.IX Header "LICENSE"
+This program is free software; you may redistribute it and/or modify it under
+the same terms as Perl itself.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+bigint and bigrat.
+.PP
+Math::BigInt, Math::BigFloat, Math::BigRat and Math::Big as well as
+Math::BigInt::FastCalc, Math::BigInt::Pari and Math::BigInt::GMP.
+.SH AUTHORS
+.IX Header "AUTHORS"
+.IP \(bu 4
+(C) by Tels <http://bloodgate.com/> in early 2002 \- 2007.
+.IP \(bu 4
+Maintained by Peter John Acklam <pjacklam@gmail.com>, 2014\-.