Bigger Numbers
The standard Math::BigInt
, Math::BigRat
, and Math::BigFloat
modules, along with the bignum
, bigint
, and bigrat
pragmas, provide variable-precision arithmetic and overloaded operators, although they're currently pretty slow. At the cost of some space and considerable speed, they avoid the normal pitfalls associated with limited-precision representations.
use 5.010; use bigint; # easy interface to Math::BigInt $x = 123456789123456789; say $x * $x; +15241578780673678515622620750190521
Or with rationals:
use 5.010; use bigrat; $x = 3/22; $y = 4/6; say "x/y is ", $x/$y; say "x*y is ", $x*$y; x/y is 9/44 x*y is 1/11
Several modules let you calculate with unlimited or fixed precision (bound only by memory and CPU time). There are also some non-standard modules that provide faster implementations via external C libraries.
Here is a short, but incomplete summary:
Math::String treat string sequences like numbers Math::FixedPrecision calculate with a fixed precision Math::Currency for currency calculations Bit::Vector manipulate bit vectors fast (uses C) Math::BigIntFast Bit::Vector wrapper for big numbers Math::Pari provides access to the Pari C library Math::Cephes uses the external Cephes C library (no big numbers) Math::Cephes::Fraction fractions via the Cephes library Math::GMP another one using an external C library Math::GMPz an alternative interface to libgmp's big ints Math::GMPq an interface to libgmp's fraction numbers Math::GMPf an interface to libgmp's floating point numbers
Choose wisely.
Please login to continue.