Crate rugint [−] [src]
Arbitrary-precision integers
The rugint
crate provides arbitrary-precision integers using the
GNU Multiple Precision Arithmetic Library (GMP). It is
one of a group of four crates:
rugint
provides arbitrary-precision integers based on GMP.rugrat
provides arbitrary-precision rational number based on GMP.rugflo
provides arbitrary-precision floating-point numbers based on MPFR.rugcom
provides arbitrary-precision complex numbers based on MPC.
This crate is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See the full text of the GNU LGPL and GNU GPL for details.
Basic use
Apart from this documentation, it can be helpful to refer to the documentation of the GMP library.
The crate provides the Integer
type, which holds an
arbitrary-precision integer. You can construct this from primitive
data types, and use the standard arithmetic operators. Many
operators can also operate on a mixture of this type and primitive
types; in this case, the result is returned as an
arbitrary-precision type.
Examples
extern crate rugint; use rugint::{Assign, Integer}; fn main() { // Create an integer initialized as zero. let mut int = Integer::new(); assert!(int == 0); assert!(int.to_u32() == Some(0)); int.assign(14); assert!(int == 14); assert!(int.to_i32() == Some(14)); }
Arithmetic operations with mixed arbitrary and primitive types are allowed.
use rugint::Integer; let mut a = Integer::from(0xc); a = (a << 80) + 0xffee; assert!(a.to_string_radix(16) == "c0000000000000000ffee"); // ^ ^ ^ ^ ^ // 80 64 48 32 16
Note that in the above example, there is only one allocation. The
Integer
instance is moved into the shift operation so that the
result can be stored in the same instance, then that result is
similarly consumed by the addition operation.
Usage
To use rugint
in your crate, add extern crate rugint;
to the
crate root and add rugint
as a dependency in Cargo.toml
:
[dependencies]
rugint = "0.2.2"
The rugint
crate depends on the low-level bindings in the
gmp-mpfr-sys
crate. This should be transparent on GNU/Linux and
macOS, but may need some work on Windows. See the gmp-mpfr-sys
documentation for some details.
Optional feature
The rugint
crate has an optional feature random
to enable
random number generation. The random
feature introduces a
dependency on the rand
crate. The feature is enabled by default;
to disable it add this to Cargo.toml
:
[dependencies.rugint]
version = "0.2.2"
default-features = false
Structs
Integer |
An arbitrary-precision integer. |
ParseIntegerError |
An error which can be returned when parsing an |
Traits
Assign |
Assigns to a number from another value. |
DivFromAssign |
Divide and assign the result to the rhs operand. |
NegAssign |
Negates the value inside |
NotAssign |
Peforms a bitwise complement of the value inside |
Pow |
Provides the power operation. |
PowAssign |
Provides the power operation inside |
RemFromAssign |
Compute the remainder and assign the result to the rhs operand. |
SubFromAssign |
Subtract and assigns the result to the rhs operand. |