Module gmp_mpfr_sys::mpfr
source · Expand description
Function and type bindings for the MPFR library.
Examples
use gmp_mpfr_sys::mpfr;
use std::mem;
let one_third = 1.0_f64 / 3.0;
unsafe {
let mut f = mem::uninitialized();
mpfr::init2(&mut f, 53);
let dir = mpfr::set_d(&mut f, one_third, mpfr::rnd_t::RNDN);
assert_eq!(dir, 0);
let d = mpfr::get_d(&f, mpfr::rnd_t::RNDN);
assert_eq!(d, one_third);
mpfr::clear(&mut f);
}
The following example is a translation of the MPFR sample found on the MPFR website. The program computes a lower bound on 1 + 1/1! + 1/2! + … + 1/100! using 200-bit precision. The program writes:
Sum is 2.7182818284590452353602874713526624977572470936999595749669131
use gmp_mpfr_sys::mpfr::{self, mpfr_t, rnd_t};
use std::ffi::CStr;
use std::fmt::Write;
use std::mem;
use std::os::raw::c_int;
use std::ptr;
fn main() {
unsafe {
let mut s = mem::uninitialized();
let mut t = mem::uninitialized();
let mut u = mem::uninitialized();
mpfr::init2(&mut t, 200);
mpfr::set_d(&mut t, 1.0, rnd_t::RNDD);
mpfr::init2(&mut s, 200);
mpfr::set_d(&mut s, 1.0, rnd_t::RNDD);
mpfr::init2(&mut u, 200);
for i in 1..101 {
mpfr::mul_ui(&mut t, &t, i, rnd_t::RNDU);
mpfr::set_d(&mut u, 1.0, rnd_t::RNDD);
mpfr::div(&mut u, &u, &t, rnd_t::RNDD);
mpfr::add(&mut s, &s, &u, rnd_t::RNDD);
}
let sr = mpfr_to_string(10, 0, &s, rnd_t::RNDD);
println!("Sum is {}", sr);
mpfr::clear(&mut s);
mpfr::clear(&mut t);
mpfr::clear(&mut u);
}
}
unsafe fn mpfr_to_string(
base: c_int, n: usize, op: *const mpfr_t, rnd: rnd_t
) -> String {
let mut exp = mem::uninitialized();
let str = mpfr::get_str(ptr::null_mut(), &mut exp, base, n, op, rnd);
let mut buf = CStr::from_ptr(str).to_string_lossy().into_owned();
mpfr::free_str(str);
if mpfr::regular_p(op) != 0 {
let idx = if buf.starts_with("-") { 2 } else { 1 };
buf.insert(idx, '.');
if exp != 1 {
buf.push(if base <= 10 { 'e' } else { '@' });
write!(buf, "{}", exp - 1).unwrap();
}
}
buf
}
Structs
Enums
See:
mpfr_rnd_t
Constants
See:
MPFR_VERSION
Functions
See:
mpfr_acosh
See:
mpfr_add_d
See:
mpfr_add_q
See:
mpfr_add_si
See:
mpfr_add_ui
See:
mpfr_add_z
See:
mpfr_asinh
See:
mpfr_asprintf
See:
mpfr_atan2
See:
mpfr_atanh
See:
mpfr_can_round
See:
mpfr_clear
See:
mpfr_clears
See:
mpfr_cmp_d
See:
mpfr_cmp_f
See:
mpfr_cmp_q
See:
mpfr_cmp_si
See:
mpfr_cmp_ui
See:
mpfr_cmp_z
See:
mpfr_cmpabs
See:
mpfr_const_pi
See:
mpfr_copysign
See:
mpfr_d_div
See:
mpfr_d_sub
See:
mpfr_digamma
See:
mpfr_div_2exp
See:
mpfr_div_2si
See:
mpfr_div_2ui
See:
mpfr_div_d
See:
mpfr_div_q
See:
mpfr_div_si
See:
mpfr_div_ui
See:
mpfr_div_z
See:
mpfr_divby0_p
See:
mpfr_equal_p
See:
mpfr_erandom
See:
mpfr_exp10
See:
mpfr_expm1
See:
mpfr_fac_ui
See:
mpfr_flags_set
See:
mpfr_floor
See:
mpfr_fmodquo
See:
mpfr_fprintf
See:
mpfr_free_str
See:
mpfr_frexp
See:
mpfr_gamma
See:
mpfr_gamma_inc
See:
mpfr_get_d
See:
mpfr_get_emax
See:
mpfr_get_emin
See:
mpfr_get_exp
See:
mpfr_get_f
See:
mpfr_get_flt
See:
mpfr_get_prec
See:
mpfr_get_q
See:
mpfr_get_si
See:
mpfr_get_sj
See:
mpfr_get_str
See:
mpfr_get_ui
See:
mpfr_get_uj
See:
mpfr_get_z
grandom⚠Deprecated
See:
mpfr_grandom
See:
mpfr_greater_p
See:
mpfr_hypot
See:
mpfr_inf_p
See:
mpfr_init2
See:
mpfr_init_set
See:
mpfr_inits
See:
mpfr_inits2
See:
mpfr_inp_str
See:
mpfr_integer_p
See:
mpfr_less_p
See:
mpfr_lgamma
See:
mpfr_lngamma
See:
mpfr_log1p
See:
mpfr_log10
See:
mpfr_log_ui
See:
mpfr_min_prec
See:
mpfr_mul_2exp
See:
mpfr_mul_2si
See:
mpfr_mul_2ui
See:
mpfr_mul_d
See:
mpfr_mul_q
See:
mpfr_mul_si
See:
mpfr_mul_ui
See:
mpfr_mul_z
See:
mpfr_nan_p
See:
mpfr_nanflag_p
See:
mpfr_nextabove
See:
mpfr_nextbelow
See:
mpfr_nrandom
See:
mpfr_number_p
See:
mpfr_out_str
See:
mpfr_pow_si
See:
mpfr_pow_ui
See:
mpfr_pow_z
See:
mpfr_printf
See:
mpfr_rec_sqrt
See:
mpfr_regular_p
See:
mpfr_reldiff
See:
mpfr_remainder
See:
mpfr_remquo
See:
mpfr_rint_ceil
See:
mpfr_rootn_ui
See:
mpfr_round
See:
mpfr_roundeven
See:
mpfr_set_d
See:
mpfr_set_emax
See:
mpfr_set_emin
See:
mpfr_set_exp
See:
mpfr_set_f
See:
mpfr_set_flt
See:
mpfr_set_inf
See:
mpfr_set_nan
See:
mpfr_set_prec
See:
mpfr_set_q
See:
mpfr_set_si
See:
mpfr_set_sj
See:
mpfr_set_str
See:
mpfr_set_ui
See:
mpfr_set_uj
See:
mpfr_set_z
See:
mpfr_set_zero
See:
mpfr_setsign
See:
mpfr_si_div
See:
mpfr_si_sub
See:
mpfr_signbit
See:
mpfr_sin_cos
See:
mpfr_sinh_cosh
See:
mpfr_snprintf
See:
mpfr_sprintf
sqrt⚠
See:
mpfr_rec_sqrt
See:
mpfr_sqrt_ui
See:
mpfr_strtofr
See:
mpfr_sub_d
See:
mpfr_sub_q
See:
mpfr_sub_si
See:
mpfr_sub_ui
See:
mpfr_sub_z
See:
mpfr_trunc
See:
mpfr_ui_div
See:
mpfr_ui_pow
See:
mpfr_ui_pow_ui
See:
mpfr_ui_sub
See:
mpfr_urandom
See:
mpfr_urandomb
See:
mpfr_z_sub
See:
mpfr_zero_p
See:
mpfr_zeta_ui