=encoding euc-jp =head1 NAME =begin original bigint - Transparent BigInteger support for Perl =end original bigint - Perl 用の透過的な BigInteger 対応 =head1 SYNOPSIS use bigint; $x = 2 + 4.5,"\n"; # BigInt 6 print 2 ** 512,"\n"; # really is what you think it is print inf + 42,"\n"; # inf print NaN * 7,"\n"; # NaN print hex("0x1234567890123490"),"\n"; # Perl v5.9.4 or later { no bigint; print 2 ** 256,"\n"; # a normal Perl scalar now } # Note that this will be global: use bigint qw/hex oct/; print hex("0x1234567890123490"),"\n"; print oct("01234567890123490"),"\n"; =head1 DESCRIPTION =begin original All operators (including basic math operations) are overloaded. Integer constants are created as proper BigInts. =end original (基本算術演算子を含む)全ての演算子がオーバーロードされます。 整数定数は適切な BigInt として作成されます。 =begin original Floating point constants are truncated to integer. All parts and results of expressions are also truncated. =end original 浮動小数点数定数は整数に切り詰められます。 式の全ての部分と結果も切り詰められます。 =begin original Unlike L, this pragma creates integer constants that are only limited in their size by the available memory and CPU time. =end original L と違って、このプラグマは利用可能なメモリと CPU 時間によってのみ 制限されるサイズの整数定数を作成します。 =head2 use integer vs. use bigint (use integer 対 use bigint) =begin original There is one small difference between C and C: the former will not affect assignments to variables and the return value of some functions. C truncates these results to integer too: =end original C と C には一つの小さな違いがあります: 前者は 変数への代入と一部の関数の返り値には影響を与えません。 C もこれらの結果を整数に切り詰めます: # perl -Minteger -wle 'print 3.2' 3.2 # perl -Minteger -wle 'print 3.2 + 0' 3 # perl -Mbigint -wle 'print 3.2' 3 # perl -Mbigint -wle 'print 3.2 + 0' 3 # perl -Mbigint -wle 'print exp(1) + 0' 2 # perl -Mbigint -wle 'print exp(1)' 2 # perl -Minteger -wle 'print exp(1)' 2.71828182845905 # perl -Minteger -wle 'print exp(1) + 0' 2 =begin original In practice this makes seldom a difference as B of expressions will be truncated anyway, but this can, for instance, affect the return value of subroutines: =end original In practice this makes seldom a difference as B of expressions will be truncated anyway, but this can, for instance, affect the return value of subroutines: (TBT) sub three_integer { use integer; return 3.2; } sub three_bigint { use bigint; return 3.2; } print three_integer(), " ", three_bigint(),"\n"; # prints "3.2 3" =head2 Options (オプション) =begin original bigint 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 bigint は use で読み込むときに渡せるオプションがいくつかあります。 オプションは(現在のところ)一文字形式と長い形式のどちらかです。 以下のオプションがあります: =over 2 =item a or accuracy (a または 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 これは全ての算術演算の有効桁数を設定します。 この引数は 0 以上でなければなりません。 詳しくは Math::BigInt の bround() 関数を参照してください。 perl -Mbigint=a,2 -le 'print 12345+1' =begin original Note that setting precision and accurary at the same time is not possible. =end original 精度と有効桁数を同時に設定することはできないことに注意してください。 =item p or precision (p または 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, and are ignored since all operations happen in integer space. A positive value rounds to this digit left from the dot. 0 or 1 mean round to integer and are ignore like negative values. =end original これは全ての算術演算の精度を設定します。 引数は任意の整数です。 負の値は小数点の後の固定桁数を意味し、全ての演算は整数の範囲で行われるので これは B<無視されます> 。 正数は小数点からこの値だけ左側の数字で丸めます。 0 または 1 は整数に丸めることを意味し、負数と同様に無視されます。 =begin original See Math::BigInt's bfround() function for details. =end original 詳しくは Math::BigInt の bfround() 関数を参照してください。 perl -Mbignum=p,5 -le 'print 123456789+123' =begin original Note that setting precision and accurary at the same time is not possible. =end original 精度と有効桁数を同時に設定することはできないことに注意してください。 =item t or trace =begin original This enables a trace mode and is primarily for debugging bigint or Math::BigInt. =end original This enables a trace mode and is primarily for debugging bigint or Math::BigInt. (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 l, lib, try or only =begin original Load a different math lib, see L. =end original Load a different math lib, see L. (TBT) perl -Mbigint=lib,GMP -e 'print 2 ** 512' perl -Mbigint=try,GMP -e 'print 2 ** 512' perl -Mbigint=only,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 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 -Mbigint=v =back =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 bigint 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 bigint 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 Internal Format (内部形式) =begin original The numbers are stored as objects, and their internals might change at anytime, especially between math operations. The objects also might belong to different classes, like Math::BigInt, or Math::BigInt::Lite. Mixing them together, even with normal scalars is not extraordinary, but normal and expected. =end original The numbers are stored as objects, and their internals might change at anytime, especially between math operations. The objects also might belong to different classes, like Math::BigInt, or Math::BigInt::Lite. Mixing them together, even with normal scalars is not extraordinary, but normal and expected. (TBT) =begin original You should not depend on the internal format, all accesses must go through accessor methods. E.g. looking at $x->{sign} is not a good idea since there is no guaranty that the object in question has such a hash key, nor is a hash underneath at all. =end original You should not depend on the internal format, all accesses must go through accessor methods. E.g. looking at $x->{sign} is not a good idea since there is no guaranty that the object in question has such a hash key, nor is a hash underneath at all. (TBT) =head2 Sign (符号) =begin original The sign is either '+', '-', 'NaN', '+inf' or '-inf'. You can access it with the sign() method. =end original The sign is either '+', '-', 'NaN', '+inf' or '-inf'. You can access it with the sign() method. (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 now objects, you can use all functions that are part of the BigInt API. You can only use the bxxx() notation, and not the fxxx() notation, though. =end original Since all numbers are now objects, you can use all functions that are part of the BigInt API. You can only use the bxxx() notation, and not the fxxx() notation, though. (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 -Mbigint=e -wle 'print e' =begin original Returns Euler's number C, aka exp(1). Note that under bigint, this is truncated to an integer, and hence simple '2'. =end original Returns Euler's number C, aka exp(1). Note that under bigint, this is truncated to an integer, and hence simple '2'. (TBT) =item PI # perl -Mbigint=PI -wle 'print PI' =begin original Returns PI. Note that under bigint, this is truncated to an integer, and hence simple '3'. =end original Returns PI. Note that under bigint, this is truncated to an integer, and hence simple '3'. (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 Note that under bigint, the result is truncated to an integer. =end original Note that under bigint, the result is truncated to an integer. (TBT) =begin original Example: =end original Example: (TBT) # perl -Mbigint=bexp -wle 'print bexp(1,80)' =item bpi() bpi($accuracy); =begin original Returns PI to the wanted accuracy. Note that under bigint, this is truncated to an integer, and hence simple '3'. =end original Returns PI to the wanted accuracy. Note that under bigint, this is truncated to an integer, and hence simple '3'. (TBT) =begin original Example: =end original Example: (TBT) # perl -Mbigint=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 bigint; print "in effect\n" if bigint::in_effect; # true { no bigint; print "in effect\n" if bigint::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 Caveat =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 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) =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 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 bigint: =end original The following modules are currently used by bigint: (TBT) Math::BigInt::Lite (for speed, and only if it is loadable) Math::BigInt =head1 EXAMPLES (例) =begin original Some cool command line examples to impress the Python crowd ;) You might want to compare them to the results under -Mbignum or -Mbigrat: =end original Some cool command line examples to impress the Python crowd ;) You might want to compare them to the results under -Mbignum or -Mbigrat: (TBT) perl -Mbigint -le 'print sqrt(33)' perl -Mbigint -le 'print 2*255' perl -Mbigint -le 'print 4.5+2*255' perl -Mbigint -le 'print 3/7 + 5/7 + 8/3' perl -Mbigint -le 'print 123->is_odd()' perl -Mbigint -le 'print log(2)' perl -Mbigint -le 'print 2 ** 0.5' perl -Mbigint=a,65 -le 'print 2 ** 0.2' perl -Mbignum=a,65,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 as in C and L as in C. =end original 特に C のような L と C のような L。 =begin original L, L and L as well as L, L and L. =end original 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