=encoding euc-jp =head1 NAME =begin original bigrat - Transparent BigNumber/BigRational support for Perl =end original bigrat - Perl 用の透過的な BigNumber/BigRational 対応 =head1 SYNOPSIS use bigrat; print 2 + 4.5,"\n"; # BigFloat 6.5 print 1/3 + 1/4,"\n"; # produces 7/12 { no bigrat; print 1/3,"\n"; # 0.33333... } # Note that this will make hex() and oct() be globally overriden: use bigrat qw/hex oct/; print hex("0x1234567890123490"),"\n"; print oct("01234567890123490"),"\n"; =head1 DESCRIPTION =begin original All operators (including basic math operations) are overloaded. Integer and floating-point constants are created as proper BigInts or BigFloats, respectively. =end original (基本算術演算子を含む)全ての演算子がオーバーロードされます。 整数定数と浮動小数点数定数はそれぞれ適切な BigInt または BigFloat として 作成されます。 =begin original Other than L, this module upgrades to Math::BigRat, meaning that instead of 2.5 you will get 2+1/2 as output. =end original Other than L, this module upgrades to Math::BigRat, meaning that instead of 2.5 you will get 2+1/2 as output. (TBT) =head2 Modules Used (使用するモジュール) =begin original C is just a thin wrapper around various modules of the Math::BigInt family. Think of it as the head of the family, who runs the shop, and orders the others to do the work. =end original C is just a thin wrapper around various modules of the Math::BigInt family. Think of it as the head of the family, who runs the shop, and orders the others to do the work. (TBT) =begin original The following modules are currently used by bignum: =end original The following modules are currently used by bignum: (TBT) Math::BigInt::Lite (for speed, and only if it is loadable) Math::BigInt Math::BigFloat Math::BigRat =head2 Math Library (算術ライブラリ) =begin original Math with the numbers is done (by default) by a module called Math::BigInt::Calc. This is equivalent to saying: =end original Math with the numbers is done (by default) by a module called Math::BigInt::Calc. This is equivalent to saying: (TBT) use bigrat lib => 'Calc'; =begin original You can change this by using: =end original You can change this by using: (TBT) use bignum lib => 'GMP'; =begin original The following would first try to find Math::BigInt::Foo, then Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc: =end original The following would first try to find Math::BigInt::Foo, then Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc: (TBT) use bigrat lib => 'Foo,Math::BigInt::Bar'; =begin original Using C warns if none of the specified libraries can be found and L did fall back to one of the default libraries. To supress this warning, use C instead: =end original Using C warns if none of the specified libraries can be found and L did fall back to one of the default libraries. To supress this warning, use C instead: (TBT) use bignum try => 'GMP'; =begin original If you want the code to die instead of falling back, use C instead: =end original If you want the code to die instead of falling back, use C instead: (TBT) use bignum only => 'GMP'; =begin original Please see respective module documentation for further details. =end original Please see respective module documentation for further details. (TBT) =head2 Sign (符号) =begin original The sign is either '+', '-', 'NaN', '+inf' or '-inf'. =end original The sign is either '+', '-', 'NaN', '+inf' or '-inf'. (TBT) =begin original A sign of 'NaN' is used to represent the result when input arguments are not numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively minus infinity. You will get '+inf' when dividing a positive number by 0, and '-inf' when dividing any negative number by 0. =end original A sign of 'NaN' is used to represent the result when input arguments are not numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively minus infinity. You will get '+inf' when dividing a positive number by 0, and '-inf' when dividing any negative number by 0. (TBT) =head2 Methods (メソッド) =begin original Since all numbers are not objects, you can use all functions that are part of the BigInt or BigFloat API. It is wise to use only the bxxx() notation, and not the fxxx() notation, though. This makes you independed on the fact that the underlying object might morph into a different class than BigFloat. =end original Since all numbers are not objects, you can use all functions that are part of the BigInt or BigFloat API. It is wise to use only the bxxx() notation, and not the fxxx() notation, though. This makes you independed on the fact that the underlying object might morph into a different class than BigFloat. (TBT) =over 2 =item inf() =begin original A shortcut to return Math::BigInt->binf(). Useful because Perl does not always handle bareword C properly. =end original A shortcut to return Math::BigInt->binf(). Useful because Perl does not always handle bareword C properly. (TBT) =item NaN() =begin original A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always handle bareword C properly. =end original A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always handle bareword C properly. (TBT) =item e # perl -Mbigrat=e -wle 'print e' =begin original Returns Euler's number C, aka exp(1). =end original Returns Euler's number C, aka exp(1). (TBT) =item PI # perl -Mbigrat=PI -wle 'print PI' =begin original Returns PI. =end original Returns PI. (TBT) =item bexp() bexp($power,$accuracy); =begin original Returns Euler's number C raised to the appropriate power, to the wanted accuracy. =end original Returns Euler's number C raised to the appropriate power, to the wanted accuracy. (TBT) =begin original Example: =end original Example: (TBT) # perl -Mbigrat=bexp -wle 'print bexp(1,80)' =item bpi() bpi($accuracy); =begin original Returns PI to the wanted accuracy. =end original Returns PI to the wanted accuracy. (TBT) =begin original Example: =end original Example: (TBT) # perl -Mbigrat=bpi -wle 'print bpi(80)' =item upgrade() =begin original Return the class that numbers are upgraded to, is in fact returning C<$Math::BigInt::upgrade>. =end original Return the class that numbers are upgraded to, is in fact returning C<$Math::BigInt::upgrade>. (TBT) =item in_effect() use bigrat; print "in effect\n" if bigrat::in_effect; # true { no bigrat; print "in effect\n" if bigrat::in_effect; # false } =begin original Returns true or false if C is in effect in the current scope. =end original Returns true or false if C is in effect in the current scope. (TBT) =begin original This method only works on Perl v5.9.4 or later. =end original This method only works on Perl v5.9.4 or later. (TBT) =back =head2 MATH LIBRARY (算術ライブラリ) =begin original Math with the numbers is done (by default) by a module called =end original Math with the numbers is done (by default) by a module called (TBT) =head2 Cavaet =begin original But a warning is in order. When using the following to make a copy of a number, only a shallow copy will be made. =end original But a warning is in order. When using the following to make a copy of a number, only a shallow copy will be made. (TBT) $x = 9; $y = $x; $x = $y = 7; =begin original If you want to make a real copy, use the following: =end original If you want to make a real copy, use the following: (TBT) $y = $x->copy(); =begin original Using the copy or the original with overloaded math is okay, e.g. the following work: =end original Using the copy or the original with overloaded math is okay, e.g. the following work: (TBT) $x = 9; $y = $x; print $x + 1, " ", $y,"\n"; # prints 10 9 =begin original but calling any method that modifies the number directly will result in B the original and the copy being destroyed: =end original but calling any method that modifies the number directly will result in B the original and the copy being destroyed: (TBT) $x = 9; $y = $x; print $x->badd(1), " ", $y,"\n"; # prints 10 10 $x = 9; $y = $x; print $x->binc(1), " ", $y,"\n"; # prints 10 10 $x = 9; $y = $x; print $x->bmul(2), " ", $y,"\n"; # prints 18 18 =begin original Using methods that do not modify, but testthe contents works: =end original Using methods that do not modify, but testthe contents works: (TBT) $x = 9; $y = $x; $z = 9 if $x->is_zero(); # works fine =begin original See the documentation about the copy constructor and C<=> in overload, as well as the documentation in BigInt for further details. =end original See the documentation about the copy constructor and C<=> in overload, as well as the documentation in BigInt for further details. (TBT) =head2 Options (オプション) =begin original bignum recognizes some options that can be passed while loading it via use. The options can (currently) be either a single letter form, or the long form. The following options exist: =end original bignum recognizes some options that can be passed while loading it via use. The options can (currently) be either a single letter form, or the long form. The following options exist: (TBT) =over 2 =item a or accuracy =begin original This sets the accuracy for all math operations. The argument must be greater than or equal to zero. See Math::BigInt's bround() function for details. =end original This sets the accuracy for all math operations. The argument must be greater than or equal to zero. See Math::BigInt's bround() function for details. (TBT) perl -Mbigrat=a,50 -le 'print sqrt(20)' =begin original Note that setting precision and accurary at the same time is not possible. =end original Note that setting precision and accurary at the same time is not possible. (TBT) =item p or precision =begin original 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 or 1 mean round to integer. See Math::BigInt's bfround() function for details. =end original 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 or 1 mean round to integer. See Math::BigInt's bfround() function for details. (TBT) perl -Mbigrat=p,-50 -le 'print sqrt(20)' =begin original Note that setting precision and accurary at the same time is not possible. =end original Note that setting precision and accurary at the same time is not possible. (TBT) =item t or trace =begin original This enables a trace mode and is primarily for debugging bignum or Math::BigInt/Math::BigFloat. =end original This enables a trace mode and is primarily for debugging bignum or Math::BigInt/Math::BigFloat. (TBT) =item l or lib =begin original Load a different math lib, see L. =end original Load a different math lib, see L. (TBT) perl -Mbigrat=l,GMP -e 'print 2 ** 512' =begin original Currently there is no way to specify more than one library on the command line. This means the following does not work: =end original Currently there is no way to specify more than one library on the command line. This means the following does not work: (TBT) perl -Mbignum=l,GMP,Pari -e 'print 2 ** 512' =begin original This will be hopefully fixed soon ;) =end original This will be hopefully fixed soon ;) (TBT) =item hex =begin original Override the built-in hex() method with a version that can handle big integers. Note that under Perl v5.9.4 or ealier, this will be global and cannot be disabled with "no bigint;". =end original Override the built-in hex() method with a version that can handle big integers. Note that under Perl v5.9.4 or ealier, this will be global and cannot be disabled with "no bigint;". (TBT) =item oct =begin original Override the built-in oct() method with a version that can handle big integers. Note that under Perl v5.9.4 or ealier, this will be global and cannot be disabled with "no bigint;". =end original Override the built-in oct() method with a version that can handle big integers. Note that under Perl v5.9.4 or ealier, this will be global and cannot be disabled with "no bigint;". (TBT) =item v or version =begin original This prints out the name and version of all modules used and then exits. =end original This prints out the name and version of all modules used and then exits. (TBT) perl -Mbigrat=v =back =head1 CAVAETS =over 2 =item in_effect() =begin original This method only works on Perl v5.9.4 or later. =end original This method only works on Perl v5.9.4 or later. (TBT) =item hex()/oct() =begin original C 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 "no bigint": =end original C 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 "no bigint": (TBT) use bigint qw/hex oct/; print hex("0x1234567890123456"); { no bigint; print hex("0x1234567890123456"); } =begin original The second call to hex() will warn about a non-portable constant. =end original The second call to hex() will warn about a non-portable constant. (TBT) =begin original Compare this to: =end original Compare this to: (TBT) use bigint; # will warn only under Perl older than v5.9.4 print hex("0x1234567890123456"); =back =head1 EXAMPLES (例) perl -Mbigrat -le 'print sqrt(33)' perl -Mbigrat -le 'print 2*255' perl -Mbigrat -le 'print 4.5+2*255' perl -Mbigrat -le 'print 3/7 + 5/7 + 8/3' perl -Mbigrat -le 'print 12->is_odd()'; perl -Mbignum=l,GMP -le 'print 7 ** 7777' =head1 LICENSE This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO =begin original Especially L. =end original Especially L. (TBT) =begin original L, L, L and L as well as L, L and L. =end original L, L, L, L および L, L, L。 =head1 AUTHORS (C) by Tels L in early 2002 - 2007. =begin meta Translate: SHIRAKATA Kentaro (0.23) Status: in progress =end meta =cut