📄 bignum.3
字号:
integer. Negative values mean a fixed number of digits after the dot, whilea positive value rounds to this digit left from the dot. 0 or 1 mean round tointeger. See Math::BigInt's \fIbfround()\fR function for details..Sp.Vb 1\& perl \-Mbignum=p,\-50 \-le \*(Aqprint sqrt(20)\*(Aq.Ve.SpNote that setting precision and accurary at the same time is not possible..IP "t or trace" 2.IX Item "t or trace"This enables a trace mode and is primarily for debugging bignum orMath::BigInt/Math::BigFloat..IP "l or lib" 2.IX Item "l or lib"Load a different math lib, see \*(L"\s-1MATH\s0 \s-1LIBRARY\s0\*(R"..Sp.Vb 1\& perl \-Mbignum=l,GMP \-e \*(Aqprint 2 ** 512\*(Aq.Ve.SpCurrently there is no way to specify more than one library on the commandline. This means the following does not work:.Sp.Vb 1\& perl \-Mbignum=l,GMP,Pari \-e \*(Aqprint 2 ** 512\*(Aq.Ve.SpThis will be hopefully fixed soon ;).IP "hex" 2.IX Item "hex"Override the built-in \fIhex()\fR method with a version that can handle bigintegers. Note that under Perl older than v5.9.4, this will be globaland cannot be disabled with \*(L"no bigint;\*(R"..IP "oct" 2.IX Item "oct"Override the built-in \fIoct()\fR method with a version that can handle bigintegers. Note that under Perl older than v5.9.4, this will be globaland cannot be disabled with \*(L"no bigint;\*(R"..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 \-Mbignum=v.Ve.Sh "Methods".IX Subsection "Methods"Beside \fIimport()\fR and \s-1\fIAUTOLOAD\s0()\fR there are only a few other methods..PPSince all numbers are now objects, you can use all functions that are part ofthe BigInt or BigFloat \s-1API\s0. It is wise to use only the \fIbxxx()\fR notation, and notthe \fIfxxx()\fR notation, though. This makes it possible that the underlying objectmight morph into a different class than BigFloat..Sh "Caveats".IX Subsection "Caveats"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.PPIf you want to make a real copy, use the following:.PP.Vb 1\& $y = $x\->copy();.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 test the 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..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 \-Mbignum=e \-wle \*(Aqprint e\*(Aq.Ve.SpReturns Euler's number \f(CW\*(C`e\*(C'\fR, aka \fIexp\fR\|(1)..IP "\s-1\fIPI\s0()\fR" 2.IX Item "PI()".Vb 1\& # perl \-Mbignum=PI \-wle \*(Aqprint PI\*(Aq.Ve.SpReturns \s-1PI\s0..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..SpExample:.Sp.Vb 1\& # perl \-Mbignum=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..SpExample:.Sp.Vb 1\& # perl \-Mbignum=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 bignum;\&\& print "in effect\en" if bignum::in_effect; # true\& {\& no bignum;\& print "in effect\en" if bignum::in_effect; # false\& }.Ve.SpReturns true or false if \f(CW\*(C`bignum\*(C'\fR is in effect in the current scope..SpThis method only works on Perl v5.9.4 or later..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 bignum 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 bignum lib => \*(AqFoo,Math::BigInt::Bar\*(Aq;.Ve.PPPlease see respective module documentation for further details..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.Sh "\s-1INTERNAL\s0 \s-1FORMAT\s0".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::BigFLoat. 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 bright idea since thereis no guaranty that the object in question has such a hashkey, nor is a hashunderneath at all..Sh "\s-1SIGN\s0".IX Subsection "SIGN"The sign is either '+', '\-', 'NaN', '+inf' or '\-inf' and stored seperately.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 "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 older than v5.9.4\& print hex("0x1234567890123456");.Ve.SH "MODULES USED".IX Header "MODULES USED"\&\f(CW\*(C`bignum\*(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 bignum:.PP.Vb 3\& Math::BigInt::Lite (for speed, and only if it is loadable)\& Math::BigInt\& Math::BigFloat.Ve.SH "EXAMPLES".IX Header "EXAMPLES"Some cool command line examples to impress the Python crowd ;).PP.Vb 10\& perl \-Mbignum \-le \*(Aqprint sqrt(33)\*(Aq\& perl \-Mbignum \-le \*(Aqprint 2*255\*(Aq\& perl \-Mbignum \-le \*(Aqprint 4.5+2*255\*(Aq\& perl \-Mbignum \-le \*(Aqprint 3/7 + 5/7 + 8/3\*(Aq\& perl \-Mbignum \-le \*(Aqprint 123\->is_odd()\*(Aq\& perl \-Mbignum \-le \*(Aqprint log(2)\*(Aq\& perl \-Mbignum \-le \*(Aqprint exp(1)\*(Aq\& perl \-Mbignum \-le \*(Aqprint 2 ** 0.5\*(Aq\& perl \-Mbignum=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..PPMath::BigFloat, Math::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 + -