📄 bigint.3
字号:
\& perl \-Mbignum=l,GMP,Pari \-e \*(Aqprint 2 ** 512\*(Aq.Ve.SpThis will be hopefully fixed soon ;).IP "v or version" 2.IX Item "v or version"This prints out the name and version of all modules used and then exits..Sp.Vb 1\& perl \-Mbigint=v.Ve.Sh "Math Library".IX Subsection "Math Library"Math with the numbers is done (by default) by a module calledMath::BigInt::Calc. This is equivalent to saying:.PP.Vb 1\& use bigint lib => \*(AqCalc\*(Aq;.Ve.PPYou can change this by using:.PP.Vb 1\& use bignum lib => \*(AqGMP\*(Aq;.Ve.PPThe following would first try to find Math::BigInt::Foo, thenMath::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:.PP.Vb 1\& use bigint lib => \*(AqFoo,Math::BigInt::Bar\*(Aq;.Ve.PPUsing \f(CW\*(C`lib\*(C'\fR warns if none of the specified libraries can be found andMath::BigInt did fall back to one of the default libraries.To supress this warning, use \f(CW\*(C`try\*(C'\fR instead:.PP.Vb 1\& use bignum try => \*(AqGMP\*(Aq;.Ve.PPIf you want the code to die instead of falling back, use \f(CW\*(C`only\*(C'\fR instead:.PP.Vb 1\& use bignum only => \*(AqGMP\*(Aq;.Ve.PPPlease see respective module documentation for further details..Sh "Internal Format".IX Subsection "Internal Format"The numbers are stored as objects, and their internals might change at anytime,especially between math operations. The objects also might belong to differentclasses, like Math::BigInt, or Math::BigInt::Lite. Mixing them together, evenwith normal scalars is not extraordinary, but normal and expected..PPYou should not depend on the internal format, all accesses must go throughaccessor methods. E.g. looking at \f(CW$x\fR\->{sign} is not a good idea since thereis no guaranty that the object in question has such a hash key, nor is a hashunderneath at all..Sh "Sign".IX Subsection "Sign"The sign is either '+', '\-', 'NaN', '+inf' or '\-inf'.You can access it with the \fIsign()\fR method..PPA sign of 'NaN' is used to represent the result when input arguments are notnumbers or as a result of 0/0. '+inf' and '\-inf' represent plus respectivelyminus infinity. You will get '+inf' when dividing a positive number by 0, and\&'\-inf' when dividing any negative number by 0..Sh "Methods".IX Subsection "Methods"Since all numbers are now objects, you can use all functions that are part ofthe BigInt \s-1API\s0. You can only use the \fIbxxx()\fR notation, and not the \fIfxxx()\fRnotation, though..IP "\fIinf()\fR" 2.IX Item "inf()"A shortcut to return Math::BigInt\->\fIbinf()\fR. Useful because Perl does not alwayshandle bareword \f(CW\*(C`inf\*(C'\fR properly..IP "\fINaN()\fR" 2.IX Item "NaN()"A shortcut to return Math::BigInt\->\fIbnan()\fR. Useful because Perl does not alwayshandle bareword \f(CW\*(C`NaN\*(C'\fR properly..IP "e" 2.IX Item "e".Vb 1\& # perl \-Mbigint=e \-wle \*(Aqprint e\*(Aq.Ve.SpReturns Euler's number \f(CW\*(C`e\*(C'\fR, aka \fIexp\fR\|(1). Note that under bigint, this istruncated to an integer, and hence simple '2'..IP "\s-1PI\s0" 2.IX Item "PI".Vb 1\& # perl \-Mbigint=PI \-wle \*(Aqprint PI\*(Aq.Ve.SpReturns \s-1PI\s0. Note that under bigint, this is truncated to an integer, and hencesimple '3'..IP "\fIbexp()\fR" 2.IX Item "bexp()".Vb 1\& bexp($power,$accuracy);.Ve.SpReturns Euler's number \f(CW\*(C`e\*(C'\fR raised to the appropriate power, tothe wanted accuracy..SpNote that under bigint, the result is truncated to an integer..SpExample:.Sp.Vb 1\& # perl \-Mbigint=bexp \-wle \*(Aqprint bexp(1,80)\*(Aq.Ve.IP "\fIbpi()\fR" 2.IX Item "bpi()".Vb 1\& bpi($accuracy);.Ve.SpReturns \s-1PI\s0 to the wanted accuracy. Note that under bigint, this is truncatedto an integer, and hence simple '3'..SpExample:.Sp.Vb 1\& # perl \-Mbigint=bpi \-wle \*(Aqprint bpi(80)\*(Aq.Ve.IP "\fIupgrade()\fR" 2.IX Item "upgrade()"Return the class that numbers are upgraded to, is in fact returning\&\f(CW$Math::BigInt::upgrade\fR..IP "\fIin_effect()\fR" 2.IX Item "in_effect()".Vb 1\& use bigint;\&\& print "in effect\en" if bigint::in_effect; # true\& {\& no bigint;\& print "in effect\en" if bigint::in_effect; # false\& }.Ve.SpReturns true or false if \f(CW\*(C`bigint\*(C'\fR is in effect in the current scope..SpThis method only works on Perl v5.9.4 or later..Sh "\s-1MATH\s0 \s-1LIBRARY\s0".IX Subsection "MATH LIBRARY"Math with the numbers is done (by default) by a module called.Sh "Caveat".IX Subsection "Caveat"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.PPUsing the copy or the original with overloaded math is okay, e.g. thefollowing work:.PP.Vb 2\& $x = 9; $y = $x;\& print $x + 1, " ", $y,"\en"; # prints 10 9.Ve.PPbut 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.PPUsing methods that do not modify, but testthe contents works:.PP.Vb 2\& $x = 9; $y = $x;\& $z = 9 if $x\->is_zero(); # works fine.Ve.PPSee the documentation about the copy constructor and \f(CW\*(C`=\*(C'\fR in overload, aswell as the documentation in BigInt for further details..SH "CAVAETS".IX Header "CAVAETS".IP "\fIin_effect()\fR" 2.IX Item "in_effect()"This method only works on Perl v5.9.4 or later..IP "\fIhex()\fR/\fIoct()\fR" 2.IX Item "hex()/oct()"\&\f(CW\*(C`bigint\*(C'\fR overrides these routines with versions that can also handlebig integer values. Under Perl prior to version v5.9.4, however, thiswill not happen unless you specifically ask for it with the twoimport tags \*(L"hex\*(R" and \*(L"oct\*(R" \- and then it will be global and cannot bedisabled inside a scope with \*(L"no bigint\*(R":.Sp.Vb 1\& use bigint qw/hex oct/;\&\& print hex("0x1234567890123456");\& {\& no bigint;\& print hex("0x1234567890123456");\& }.Ve.SpThe second call to \fIhex()\fR will warn about a non-portable constant..SpCompare this to:.Sp.Vb 1\& use bigint;\&\& # will warn only under Perl older than v5.9.4\& print hex("0x1234567890123456");.Ve.SH "MODULES USED".IX Header "MODULES USED"\&\f(CW\*(C`bigint\*(C'\fR is just a thin wrapper around various modules of the Math::BigIntfamily. Think of it as the head of the family, who runs the shop, and ordersthe others to do the work..PPThe following modules are currently used by bigint:.PP.Vb 2\& Math::BigInt::Lite (for speed, and only if it is loadable)\& Math::BigInt.Ve.SH "EXAMPLES".IX Header "EXAMPLES"Some cool command line examples to impress the Python crowd ;) You might wantto compare them to the results under \-Mbignum or \-Mbigrat:.PP.Vb 9\& perl \-Mbigint \-le \*(Aqprint sqrt(33)\*(Aq\& perl \-Mbigint \-le \*(Aqprint 2*255\*(Aq\& perl \-Mbigint \-le \*(Aqprint 4.5+2*255\*(Aq\& perl \-Mbigint \-le \*(Aqprint 3/7 + 5/7 + 8/3\*(Aq\& perl \-Mbigint \-le \*(Aqprint 123\->is_odd()\*(Aq\& perl \-Mbigint \-le \*(Aqprint log(2)\*(Aq\& perl \-Mbigint \-le \*(Aqprint 2 ** 0.5\*(Aq\& perl \-Mbigint=a,65 \-le \*(Aqprint 2 ** 0.2\*(Aq\& perl \-Mbignum=a,65,l,GMP \-le \*(Aqprint 7 ** 7777\*(Aq.Ve.SH "LICENSE".IX Header "LICENSE"This program is free software; you may redistribute it and/or modify it underthe same terms as Perl itself..SH "SEE ALSO".IX Header "SEE ALSO"Especially bigrat as in \f(CW\*(C`perl \-Mbigrat \-le \*(Aqprint 1/3+1/4\*(Aq\*(C'\fR andbignum as in \f(CW\*(C`perl \-Mbignum \-le \*(Aqprint sqrt(2)\*(Aq\*(C'\fR..PPMath::BigInt, Math::BigRat and Math::Big as wellas Math::BigInt::BitVect, Math::BigInt::Pari and Math::BigInt::GMP..SH "AUTHORS".IX Header "AUTHORS"(C) by Tels <http://bloodgate.com/> in early 2002 \- 2007.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -