Module gmp_mpfr_sys::mpfr
source · [−]Expand description
Function and type bindings for the MPFR library.
Examples
use core::mem::MaybeUninit;
use gmp_mpfr_sys::mpfr;
let one_third = 1.0_f64 / 3.0;
unsafe {
let mut f = MaybeUninit::uninit();
mpfr::init2(f.as_mut_ptr(), 53);
let mut f = f.assume_init();
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 outputs:
Sum is 2.7182818284590452353602874713526624977572470936999595749669131e0
use core::mem::MaybeUninit;
use gmp_mpfr_sys::mpfr::{self, rnd_t};
use libc::{self, c_char, c_int, STDOUT_FILENO};
fn main() {
unsafe {
let mut t = MaybeUninit::uninit();
mpfr::init2(t.as_mut_ptr(), 200);
let mut t = t.assume_init();
mpfr::set_d(&mut t, 1.0, rnd_t::RNDD);
let mut s = MaybeUninit::uninit();
mpfr::init2(s.as_mut_ptr(), 200);
let mut s = s.assume_init();
mpfr::set_d(&mut s, 1.0, rnd_t::RNDD);
let mut u = MaybeUninit::uninit();
mpfr::init2(u.as_mut_ptr(), 200);
let mut u = u.assume_init();
for i in 1..=100 {
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 stdout = libc::fdopen(STDOUT_FILENO, b"w\0".as_ptr() as *const c_char);
libc::fputs(b"Sum is \0".as_ptr() as *const c_char, stdout);
mpfr::out_str(stdout, 10, 0, &s, rnd_t::RNDD);
libc::fputc(b'\n' as c_int, stdout);
libc::fclose(stdout);
mpfr::clear(&mut s);
mpfr::clear(&mut t);
mpfr::clear(&mut u);
mpfr::free_cache();
}
}
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_atan2
See: mpfr_atanh
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_d_div
See: mpfr_d_sub
See: mpfr_digamma
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_equal_p
See: mpfr_erandom
See: mpfr_exp10
See: mpfr_expm1
See: mpfr_fac_ui
See: mpfr_floor
See: mpfr_fmodquo
See: mpfr_fprintf
See: mpfr_frexp
See: mpfr_gamma
See: mpfr_get_d
See: mpfr_get_exp
See: mpfr_get_f
See: mpfr_get_flt
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
See: mpfr_grandom
See: mpfr_hypot
See: mpfr_inf_p
See: mpfr_init2
See: mpfr_inits
See: mpfr_inits2
See: mpfr_inp_str
See: mpfr_less_p
See: mpfr_lgamma
See: mpfr_lngamma
See: mpfr_log1p
See: mpfr_log10
See: mpfr_log_ui
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_nrandom
See: mpfr_out_str
See: mpfr_pow_si
See: mpfr_pow_ui
See: mpfr_pow_z
See: mpfr_printf
See: mpfr_reldiff
See: mpfr_remquo
See: mpfr_round
See: mpfr_set_d
See: mpfr_set_exp
See: mpfr_set_f
See: mpfr_set_flt
See: mpfr_set_inf
See: mpfr_set_nan
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_setsign
See: mpfr_si_div
See: mpfr_si_sub
See: mpfr_signbit
See: mpfr_sin_cos
See: mpfr_sprintf
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_sub
See: mpfr_urandom
See: mpfr_z_sub
See: mpfr_zero_p
See: mpfr_zeta_ui