Skip to content

Liozou/BigRationals.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BigRationals

Build Status Build Status codecov Aqua QA

This package provides a wrapper around the GNU Multiple Precision (GMP) rational type mpq_t into the new Julia type BigRational. It requires GMP to be installed. For interoperability with Julia's native BigInt type (which is a wrapper around GMP's integer type mpz_t), the same version of GMP should be used for both Julia and this package. This package is not tested for systems where the default GMP installation version is not the same as Julia's.

GMP functions for rationals are wrapped in the MPQ module, similar to Base.GMP.MPZ. For instance, to use faster in-place operations, one may do:

julia> using BigRationals

julia> x = BigRational(3,4)
BigRational(3,4)

julia> BigRationals.MPQ.add!(x, BigRational(2,3))
BigRational(17,12)

julia> x
BigRational(17,12)

The BigRational type can also be used with the full interface of the native Rational type, including the numerator and denominator functions, comparisons (==, <=, etc.), arithmetic (+, -, *, /, etc.) and others. It is also defined as a subtype of Real and can be used as such.

BigRational aims to be a faster replacement for Rational{BigInt}. However, both types coexist when using this package and Rational{BigInt} can still be used as before. Conversion between the two types is as simple as:

julia> x = BigRational(3,4)
BigRational(3,4)

julia> y = Rational(x)
3//4

julia> typeof(y)
Rational{BigInt}

julia> BigRational(y)
BigRational(3,4)

Be warned that, even with this package, widen(Rational{Int128}) == Rational{BigInt} and big(Rational) == Rational{BigInt} and not BigRational, since changing these behaviours would be type piracy.

About

Julia wrapper around GMP's rational type

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages