bigrat - Transparent BigNumber/BigRational support for Perl
use bigrat;
$x = 2 + 4.5,"\n"; # BigFloat 6.5 print 1/3 + 1/4,"\n"; # produces 7/12
Other than bignum, this module upgrades to Math::BigRat, meaning that instead of 2.5 you will get 2+1/2 as output.
The following modules are currently used by bignum:
Math::BigInt::Lite (for speed, and only if it is loadable) Math::BigInt Math::BigFloat Math::BigRat
use bigrat lib => 'Calc';
You can change this by using:
use bigrat lib => 'BitVect';
The following would first try to find Math::BigInt::Foo, then Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
use bigrat lib => 'Foo,Math::BigInt::Bar';
Please see respective module documentation for further details.
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.
$x = 9; $y = $x; $x = $y = 7;
If you want to make a real copy, use the following:
$y = $x->copy();
Using the copy or the original with overloaded math is okay, e.g. the following work:
$x = 9; $y = $x; print $x + 1, " ", $y,"\n"; # prints 10 9
but calling any method that modifies the number directly will result in both the original and the copy beeing destroyed:
$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
Using methods that do not modify, but testthe contents works:
$x = 9; $y = $x; $z = 9 if $x->is_zero(); # works fine
See the documentation about the copy constructor and "=" in overload, as well as the documentation in BigInt for further details.
perl -Mbigrat=a,50 -le 'print sqrt(20)'
perl -Mbigrat=p,-50 -le 'print sqrt(20)'
perl -Mbigrat=l,GMP -e 'print 2 ** 512'
Currently there is no way to specify more than one library on the command line. This will be hopefully fixed soon ;)
perl -Mbigrat=v
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()';
Math::BigFloat, Math::BigInt, Math::BigRat and Math::Big as well as Math::BigInt::BitVect, Math::BigInt::Pari and Math::BigInt::GMP.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |