perldoc > Math::BigRat

๐Ÿ“› NAME

Math::BigRat - Arbitrary big rational numbers

๐Ÿš€ Quick Reference

Use CaseCommandDescription
Create a rational$x = Math::BigRat->new('3/7');Create a new BigRat from a fraction string
Add fractions$x += '5/9';Add a rational number using overloaded operators
Convert to integer$x->as_int();Truncate to integer as BigInt
Convert to float$x->as_float($digits);Convert to BigFloat with specified accuracy
Compare$x->bcmp($y);Compare signed values (-1,0,1)
Modular inverse$x->bmodinv($mod);Multiplicative inverse modulo $mod
Square root$x->bsqrt();Compute square root
Factorial$x->bfac();Compute factorial (integer only)
Check if zero$x->is_zero();Test for zero
Set precisionMath::BigRat->config('accuracy', 50);Set global accuracy

๐Ÿ“– SYNOPSIS

use Math::BigRat;

my $x = Math::BigRat->new('3/7'); $x += '5/9';

print $x->bstr(), "\n";
print $x ** 2, "\n";

my $y = Math::BigRat->new('inf');
print "$y ", ($y->is_inf ? 'is' : 'is not'), " infinity\n";

my $z = Math::BigRat->new(144); $z->bsqrt();

๐Ÿ“˜ DESCRIPTION

Math::BigRat complements Math::BigInt and Math::BigFloat by providing support for arbitrary big rational numbers.

๐Ÿ“š MATH LIBRARY

You can change the underlying module that does the low-level math operations by using:

use Math::BigRat try => 'GMP';

Note: This needs Math::BigInt::GMP installed.

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 Math::BigRat try => 'Foo,Math::BigInt::Bar';

If you want to get warned when the fallback occurs, replace "try" with "lib":

use Math::BigRat lib => 'Foo,Math::BigInt::Bar';

If you want the code to die instead, replace "try" with "only":

use Math::BigRat  'Foo,Math::BigInt::Bar';

๐Ÿ”ง METHODS

Any methods not listed here are derived from Math::BigFloat (or Math::BigInt), so make sure you check these two modules for further information.

๐Ÿ†• new()

Create a new Math::BigRat object. Input can come in various forms:

$x = Math::BigRat->new(123);                            # scalars
$x = Math::BigRat->new('inf');                          # infinity
$x = Math::BigRat->new('123.3');                        # float
$x = Math::BigRat->new('1/3');                          # simple string
$x = Math::BigRat->new('1 / 3');                        # spaced
$x = Math::BigRat->new('1 / 0.1');                      # w/ floats
$x = Math::BigRat->new(Math::BigInt->new(3));           # BigInt
$x = Math::BigRat->new(Math::BigFloat->new('3.1'));     # BigFloat
$x = Math::BigRat->new(Math::BigInt::Lite->new('2'));   # BigLite

# You can also give D and N as different objects:
$x = Math::BigRat->new(
        Math::BigInt->new(-123),
        Math::BigInt->new(7),
     );                      # => -123/7

๐Ÿ”ข numerator()

$n = $x->numerator();

Returns a copy of the numerator (the part above the line) as signed BigInt.

๐Ÿ”ข denominator()

$d = $x->denominator();

Returns a copy of the denominator (the part under the line) as positive BigInt.

โœ‚๏ธ parts()

($n, $d) = $x->parts();

Return a list consisting of (signed) numerator and (unsigned) denominator as BigInts.

๐Ÿ”ข numify()

my $y = $x->numify();

Returns the object as a scalar. This will lose some data if the object cannot be represented by a normal Perl scalar (integer or float), so use "as_int()" or "as_float()" instead.

This routine is automatically used whenever a scalar is required:

my $x = Math::BigRat->new('3/1');
@array = (0, 1, 2, 3);
$y = $array[$x];                # set $y to 3

๐Ÿ”ข as_int()
๐Ÿ”ข as_number()

$x = Math::BigRat->new('13/7');
print $x->as_int(), "\n";               # '1'

Returns a copy of the object as BigInt, truncated to an integer.

"as_number()" is an alias for "as_int()".

๐Ÿ”ข as_float()

$x = Math::BigRat->new('13/7');
print $x->as_float(), "\n";             # '1'

$x = Math::BigRat->new('2/3');
print $x->as_float(5), "\n";            # '0.66667'

Returns a copy of the object as BigFloat, preserving the accuracy as wanted, or the default of 40 digits.

This method was added in v0.22 of Math::BigRat (April 2008).

๐Ÿ”ข as_hex()

$x = Math::BigRat->new('13');
print $x->as_hex(), "\n";               # '0xd'

Returns the BigRat as hexadecimal string. Works only for integers.

๐Ÿ”ข as_bin()

$x = Math::BigRat->new('13');
print $x->as_bin(), "\n";               # '0x1101'

Returns the BigRat as binary string. Works only for integers.

๐Ÿ”ข as_oct()

$x = Math::BigRat->new('13');
print $x->as_oct(), "\n";               # '015'

Returns the BigRat as octal string. Works only for integers.

๐Ÿ”ข from_hex()

my $h = Math::BigRat->from_hex('0x10');

Create a BigRat from a hexadecimal number in string form.

๐Ÿ”ข from_oct()

my $o = Math::BigRat->from_oct('020');

Create a BigRat from an octal number in string form.

๐Ÿ”ข from_bin()

my $b = Math::BigRat->from_bin('0b10000000');

Create a BigRat from an binary number in string form.

โš ๏ธ bnan()

$x = Math::BigRat->bnan();
$x->bnan();

Creates a new BigRat object representing NaN (Not A Number). If used on an object, it will set it to NaN.

0๏ธโƒฃ bzero()

$x = Math::BigRat->bzero();
$x->bzero();

Creates a new BigRat object representing zero. If used on an object, it will set it to zero.

โ™พ๏ธ binf()

$x = Math::BigRat->binf($sign);
$x->binf();
$x->binf('-');

Creates a new BigRat object representing infinity. The optional argument is either '-' or '+', indicating whether you want infinity or minus infinity. If used on an object, it will set it to infinity.

1๏ธโƒฃ bone()

$x = Math::BigRat->bone($sign);
$x->bone();                 # +1
$x->bone('-');              # -1

Creates a new BigRat object representing one. The optional argument is either '-' or '+', indicating whether you want one or minus one. If used on an object, it will set it to one.

๐Ÿ“ length()

$len = $x->length();

Return the length of $x in digits for integer values.

๐Ÿ”ข digit()

print Math::BigRat->new('123/1')->digit(1);     # 1
print Math::BigRat->new('123/1')->digit(-1);    # 3

Return the N'ths digit from X when X is an integer value.

๐Ÿงน bnorm()

$x->bnorm();

Reduce the number to the shortest form. This routine is called automatically whenever it is needed.

๐ŸŽฏ bfac()

$x->bfac();
print Math::BigRat->new('3/1')->bfac(), "\n";   # 1*2*3
print Math::BigRat->new('5/1')->bfac(), "\n";   # 1*2*3*4*5

Calculates the factorial of $x. Works currently only for integers.

๐Ÿšซ bround()/round()/bfround()

Are not yet implemented.

๐Ÿงฎ bmod()

$x->bmod($y);

Returns $x modulo $y. When $x is finite, and $y is finite and non-zero, the result is identical to the remainder after floored division (F-division). If, in addition, both $x and $y are integers, the result is identical to the result from Perl's % operator.

๐Ÿงฎ bmodinv()

$x->bmodinv($mod);          # modular multiplicative inverse

Returns the multiplicative inverse of $x modulo $mod. If

$y = $x -> copy() -> bmodinv($mod)

then $y is the number closest to zero, and with the same sign as $mod, satisfying

($x * $y) % $mod = 1 % $mod

If $x and $y are non-zero, they must be relative primes, i.e., "bgcd($y, $mod)==1". '"NaN"' is returned when no modular multiplicative inverse exists.

๐Ÿงฎ bmodpow()

$num->bmodpow($exp,$mod);           # modular exponentiation
                                    # ($num**$exp % $mod)

Returns the value of $num taken to the power $exp in the modulus $mod using binary exponentiation. "bmodpow" is far superior to writing

$num ** $exp % $mod

because it is much faster - it reduces internal variables into the modulus whenever possible, so it operates on smaller numbers.

"bmodpow" also supports negative exponents.

bmodpow($num, -1, $mod)

is exactly equivalent to

bmodinv($num, $mod)

๐Ÿ”„ bneg()

$x->bneg();

Used to negate the object in-place.

โœ… is_one()

print "$x is 1\n" if $x->is_one();

Return true if $x is exactly one, otherwise false.

๐Ÿ…พ๏ธ is_zero()

print "$x is 0\n" if $x->is_zero();

Return true if $x is exactly zero, otherwise false.

โž• is_pos() / is_positive()

print "$x is >= 0\n" if $x->is_positive();

Return true if $x is positive (greater than or equal to zero), otherwise false. Please note that '+inf' is also positive, while 'NaN' and '-inf' aren't.

"is_positive()" is an alias for "is_pos()".

โž– is_neg() / is_negative()

print "$x is < 0\n" if $x->is_negative();

Return true if $x is negative (smaller than zero), otherwise false. Please note that '-inf' is also negative, while 'NaN' and '+inf' aren't.

"is_negative()" is an alias for "is_neg()".

๐Ÿ”ข is_int()

print "$x is an integer\n" if $x->is_int();

Return true if $x has a denominator of 1 (e.g. no fraction parts), otherwise false. Please note that '-inf', 'inf' and 'NaN' aren't integer.

๐ŸŽฒ is_odd()

print "$x is odd\n" if $x->is_odd();

Return true if $x is odd, otherwise false.

๐ŸŽฒ is_even()

print "$x is even\n" if $x->is_even();

Return true if $x is even, otherwise false.

โฌ†๏ธ bceil()

$x->bceil();

Set $x to the next bigger integer value (e.g. truncate the number to integer and then increment it by one).

โฌ‡๏ธ bfloor()

$x->bfloor();

Truncate $x to an integer value.

๐Ÿ”ข bint()

$x->bint();

Round $x towards zero.

โˆš๏ธ bsqrt()

$x->bsqrt();

Calculate the square root of $x.

โˆš๏ธ broot()

$x->broot($n);

Calculate the N'th root of $x.

โž• badd()

$x->badd($y);

Adds $y to $x and returns the result.

โœ–๏ธ bmul()

$x->bmul($y);

Multiplies $y to $x and returns the result.

โž– bsub()

$x->bsub($y);

Subtracts $y from $x and returns the result.

โž— bdiv()

$q = $x->bdiv($y);
($q, $r) = $x->bdiv($y);

In scalar context, divides $x by $y and returns the result. In list context, does floored division (F-division), returning an integer $q and a remainder $r so that $x = $q * $y + $r. The remainer (modulo) is equal to what is returned by "$x->bmod($y)".

๐Ÿ”ฝ bdec()

$x->bdec();

Decrements $x by 1 and returns the result.

๐Ÿ”ผ binc()

$x->binc();

Increments $x by 1 and returns the result.

๐Ÿ“‹ copy()

my $z = $x->copy();

Makes a deep copy of the object.

Please see the documentation in Math::BigInt for further details.

๐Ÿ“„ bstr() / bsstr()

my $x = Math::BigRat->new('8/4');
print $x->bstr(), "\n";             # prints 1/2
print $x->bsstr(), "\n";            # prints 1/2

Return a string representing this object.

โš–๏ธ bcmp()

$x->bcmp($y);

Compares $x with $y and takes the sign into account. Returns -1, 0, 1 or undef.

โš–๏ธ bacmp()

$x->bacmp($y);

Compares $x with $y while ignoring their sign. Returns -1, 0, 1 or undef.

โš–๏ธ beq()

$x -> beq($y);

Returns true if and only if $x is equal to $y, and false otherwise.

โš–๏ธ bne()

$x -> bne($y);

Returns true if and only if $x is not equal to $y, and false otherwise.

โš–๏ธ blt()

$x -> blt($y);

Returns true if and only if $x is equal to $y, and false otherwise.

โš–๏ธ ble()

$x -> ble($y);

Returns true if and only if $x is less than or equal to $y, and false otherwise.

โš–๏ธ bgt()

$x -> bgt($y);

Returns true if and only if $x is greater than $y, and false otherwise.

โš–๏ธ bge()

$x -> bge($y);

Returns true if and only if $x is greater than or equal to $y, and false otherwise.

๐Ÿ”€ blsft() / brsft()

Used to shift numbers left/right.

Please see the documentation in Math::BigInt for further details.

๐Ÿงฎ band()

$x->band($y);               # bitwise and

๐Ÿงฎ bior()

$x->bior($y);               # bitwise inclusive or

๐Ÿงฎ bxor()

$x->bxor($y);               # bitwise exclusive or

๐Ÿงฎ bnot()

$x->bnot();                 # bitwise not (two's complement)

๐Ÿงฎ bpow()

$x->bpow($y);

Compute $x ** $y.

Please see the documentation in Math::BigInt for further details.

๐Ÿงฎ blog()

$x->blog($base, $accuracy);         # logarithm of x to the base $base

If $base is not defined, Euler's number (e) is used:

print $x->blog(undef, 100);         # log(x) to 100 digits

๐Ÿงฎ bexp()

$x->bexp($accuracy);        # calculate e ** X

Calculates two integers A and B so that A/B is equal to "e ** $x", where "e" is Euler's number.

This method was added in v0.20 of Math::BigRat (May 2007).

See also "blog()".

๐Ÿงฎ bnok()

$x->bnok($y);               # x over y (binomial coefficient n over k)

Calculates the binomial coefficient n over k, also called the "choose" function. The result is equivalent to:

( n )      n!
| - |  = -------
( k )    k!(n-k)!

This method was added in v0.20 of Math::BigRat (May 2007).

โš™๏ธ config()

Math::BigRat->config("trap_nan" => 1);      # set
$accu = Math::BigRat->config("accuracy");   # get

Set or get configuration parameter values. Read-only parameters are marked as RO. Read-write parameters are marked as RW. The following parameters are supported.

ParameterRO/RWDescriptionExample
๐Ÿ“š libROName of the math backend libraryMath::BigInt::Calc
๐Ÿท๏ธ lib_versionROVersion of the math backend library0.30
๐Ÿท๏ธ classROThe class of config you just calledMath::BigRat
๐Ÿ†š versionROversion number of the class you used0.10
โฌ†๏ธ upgradeRWTo which class numbers are upgradedundef
โฌ‡๏ธ downgradeRWTo which class numbers are downgradedundef
๐ŸŽฏ precisionRWGlobal precisionundef
๐ŸŽฏ accuracyRWGlobal accuracyundef
๐Ÿ”„ round_modeRWGlobal round modeeven
๐Ÿงฎ div_scaleRWFallback accuracy for div, sqrt etc.40
โš ๏ธ trap_nanRWTrap NaNsundef
โš ๏ธ trap_infRWTrap +inf/-infundef

๐Ÿ› BUGS

Please report any bugs or feature requests to "bug-math-bigrat at rt.cpan.org", or through the web interface at <https://rt.cpan.org/Ticket/Create.html?Queue=Math-BigRat> (requires login). We will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

๐Ÿ†˜ SUPPORT

You can find documentation for this module with the perldoc command.

perldoc Math::BigRat

You can also look for information at:

๐Ÿ“œ LICENSE

This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.

๐Ÿ‘€ SEE ALSO

bigrat, Math::BigFloat and Math::BigInt as well as the backends Math::BigInt::FastCalc, Math::BigInt::GMP, and Math::BigInt::Pari.

โœ๏ธ AUTHORS

Math::BigRat
๐Ÿ“› NAME ๐Ÿš€ Quick Reference ๐Ÿ“– SYNOPSIS ๐Ÿ“˜ DESCRIPTION
๐Ÿ“š MATH LIBRARY
๐Ÿ”ง METHODS
๐Ÿ†• new() ๐Ÿ”ข numerator() ๐Ÿ”ข denominator() โœ‚๏ธ parts() ๐Ÿ”ข numify() ๐Ÿ”ข as_int()๐Ÿ”ข as_number() ๐Ÿ”ข as_float() ๐Ÿ”ข as_hex() ๐Ÿ”ข as_bin() ๐Ÿ”ข as_oct() ๐Ÿ”ข from_hex() ๐Ÿ”ข from_oct() ๐Ÿ”ข from_bin() โš ๏ธ bnan() 0๏ธโƒฃ bzero() โ™พ๏ธ binf() 1๏ธโƒฃ bone() ๐Ÿ“ length() ๐Ÿ”ข digit() ๐Ÿงน bnorm() ๐ŸŽฏ bfac() ๐Ÿšซ bround()/round()/bfround() ๐Ÿงฎ bmod() ๐Ÿงฎ bmodinv() ๐Ÿงฎ bmodpow() ๐Ÿ”„ bneg() โœ… is_one() ๐Ÿ…พ๏ธ is_zero() โž• is_pos() / is_positive() โž– is_neg() / is_negative() ๐Ÿ”ข is_int() ๐ŸŽฒ is_odd() ๐ŸŽฒ is_even() โฌ†๏ธ bceil() โฌ‡๏ธ bfloor() ๐Ÿ”ข bint() โˆš๏ธ bsqrt() โˆš๏ธ broot() โž• badd() โœ–๏ธ bmul() โž– bsub() โž— bdiv() ๐Ÿ”ฝ bdec() ๐Ÿ”ผ binc() ๐Ÿ“‹ copy() ๐Ÿ“„ bstr() / bsstr() โš–๏ธ bcmp() โš–๏ธ bacmp() โš–๏ธ beq() โš–๏ธ bne() โš–๏ธ blt() โš–๏ธ ble() โš–๏ธ bgt() โš–๏ธ bge() ๐Ÿ”€ blsft() / brsft() ๐Ÿงฎ band() ๐Ÿงฎ bior() ๐Ÿงฎ bxor() ๐Ÿงฎ bnot() ๐Ÿงฎ bpow() ๐Ÿงฎ blog() ๐Ÿงฎ bexp() ๐Ÿงฎ bnok() โš™๏ธ config()
๐Ÿ› BUGS ๐Ÿ†˜ SUPPORT ๐Ÿ“œ LICENSE ๐Ÿ‘€ SEE ALSO โœ๏ธ AUTHORS

Generated by phpman v4.9.29 · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-07-21 00:05 @2600:1f28:365:80b0:d8a5:c3c6:bf94:28c0
CrawledBy CCBot/2.0 (https://commoncrawl.org/faq/)
Valid XHTML 1.0 Transitional!Valid CSS!
Enhanced by LLM: deepseek-v4-flash / taotoken.net / www.chedong.com - original format

^_top_^