Module 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 = {
        let mut f = MaybeUninit::uninit();
        mpfr::init2(f.as_mut_ptr(), 53);
        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::ffi::c_int;
use core::mem::MaybeUninit;
use gmp_mpfr_sys::mpfr;
use gmp_mpfr_sys::mpfr::rnd_t;
use libc::STDOUT_FILENO;

fn main() {
    unsafe {
        let mut t = {
            let mut t = MaybeUninit::uninit();
            mpfr::init2(t.as_mut_ptr(), 200);
            t.assume_init()
        };
        mpfr::set_d(&mut t, 1.0, rnd_t::RNDD);

        let mut s = {
            let mut s = MaybeUninit::uninit();
            mpfr::init2(s.as_mut_ptr(), 200);
            s.assume_init()
        };
        mpfr::set_d(&mut s, 1.0, rnd_t::RNDD);

        let mut u = {
            let mut u = MaybeUninit::uninit();
            mpfr::init2(u.as_mut_ptr(), 200);
            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().cast());
        libc::fputs(b"Sum is \0".as_ptr().cast(), 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§

mpfr_t
See: mpfr_t and Internals

Enums§

rnd_t
See: mpfr_rnd_t

Constants§

FREE_GLOBAL_CACHE
See: mpfr_free_cache2
FREE_LOCAL_CACHE
See: mpfr_free_cache2
INF_KIND
See: mpfr_custom_init_set
NAN_KIND
See: mpfr_custom_init_set
PREC_MAX
See: Nomenclature and Types
PREC_MIN
See: Nomenclature and Types
REGULAR_KIND
See: mpfr_custom_init_set
VERSION
See: MPFR_VERSION
VERSION_MAJOR
See: MPFR_VERSION_MAJOR
VERSION_MINOR
See: MPFR_VERSION_MINOR
VERSION_PATCHLEVEL
See: MPFR_VERSION_PATCHLEVEL
VERSION_STRING
See: MPFR_VERSION_STRING
ZERO_KIND
See: mpfr_custom_init_set

Functions§

VERSION_NUM
See: MPFR_VERSION_NUM
abs
See: mpfr_abs
acos
See: mpfr_acos
acosh
See: mpfr_acosh
acospi
See: mpfr_acospi
acosu
See: mpfr_acosu
add
See: mpfr_add
add_d
See: mpfr_add_d
add_q
See: mpfr_add_q
add_si
See: mpfr_add_si
add_ui
See: mpfr_add_ui
add_z
See: mpfr_add_z
agm
See: mpfr_agm
ai
See: mpfr_ai
asin
See: mpfr_asin
asinh
See: mpfr_asinh
asinpi
See: mpfr_asinpi
asinu
See: mpfr_asinu
asprintf
See: mpfr_asprintf
atan
See: mpfr_atan
atan2
See: mpfr_atan2
atan2pi
See: mpfr_atan2pi
atan2u
See: mpfr_atan2u
atanh
See: mpfr_atanh
atanpi
See: mpfr_atanpi
atanu
See: mpfr_atanu
beta
See: mpfr_beta
buildopt_decimal_p
See: mpfr_buildopt_decimal_p
buildopt_float128_p
See: mpfr_buildopt_float128_p
buildopt_gmpinternals_p
See: mpfr_buildopt_gmpinternals_p
buildopt_sharedcache_p
See: mpfr_buildopt_sharedcache_p
buildopt_tls_p
See: mpfr_buildopt_tls_p
buildopt_tune_case
See: mpfr_buildopt_tune_case
can_round
See: mpfr_can_round
cbrt
See: mpfr_cbrt
ceil
See: mpfr_ceil
check_range
See: mpfr_check_range
clear
See: mpfr_clear
clear_divby0
See: mpfr_clear_divby0
clear_erangeflag
See: mpfr_clear_erangeflag
clear_flags
See: mpfr_clear_flags
clear_inexflag
See: mpfr_clear_inexflag
clear_nanflag
See: mpfr_clear_nanflag
clear_overflow
See: mpfr_clear_overflow
clear_underflow
See: mpfr_clear_underflow
clears
See: mpfr_clears
cmp
See: mpfr_cmp
cmp_d
See: mpfr_cmp_d
cmp_f
See: mpfr_cmp_f
cmp_q
See: mpfr_cmp_q
cmp_si
See: mpfr_cmp_si
cmp_si_2exp
See: mpfr_cmp_si_2exp
cmp_ui
See: mpfr_cmp_ui
cmp_ui_2exp
See: mpfr_cmp_ui_2exp
cmp_z
See: mpfr_cmp_z
cmpabs
See: mpfr_cmpabs
cmpabs_ui
See: mpfr_cmpabs_ui
compound_si
See: mpfr_compound_si
const_catalan
See: mpfr_const_catalan
const_euler
See: mpfr_const_euler
const_log2
See: mpfr_const_log2
const_pi
See: mpfr_const_pi
copysign
See: mpfr_copysign
cos
See: mpfr_cos
cosh
See: mpfr_cosh
cospi
See: mpfr_cospi
cosu
See: mpfr_cosu
cot
See: mpfr_cot
coth
See: mpfr_coth
csc
See: mpfr_csc
csch
See: mpfr_csch
custom_get_exp
See: mpfr_custom_get_exp
custom_get_kind
See: mpfr_custom_get_kind
custom_get_significand
See: mpfr_custom_get_significand
custom_get_size
See: mpfr_custom_get_size
custom_init
See: mpfr_custom_init
custom_init_set
See: mpfr_custom_init_set
custom_move
See: mpfr_custom_move
d_div
See: mpfr_d_div
d_sub
See: mpfr_d_sub
digamma
See: mpfr_digamma
dim
See: mpfr_dim
div
See: mpfr_div
div_2exp
See: mpfr_div_2exp
div_2si
See: mpfr_div_2si
div_2ui
See: mpfr_div_2ui
div_d
See: mpfr_div_d
div_q
See: mpfr_div_q
div_si
See: mpfr_div_si
div_ui
See: mpfr_div_ui
div_z
See: mpfr_div_z
divby0_p
See: mpfr_divby0_p
dot
See: mpfr_dot
dump
See: mpfr_dump
eint
See: mpfr_eint
eq
See: mpfr_eq
equal_p
See: mpfr_equal_p
erandom
See: mpfr_erandom
erangeflag_p
See: mpfr_erangeflag_p
erf
See: mpfr_erf
erfc
See: mpfr_erfc
exp
See: mpfr_exp
exp2
See: mpfr_exp2
exp2m1
See: mpfr_exp2m1
exp10
See: mpfr_exp10
exp10m1
See: mpfr_exp10m1
expm1
See: mpfr_expm1
fac_ui
See: mpfr_fac_ui
fits_intmax_p
See: mpfr_fits_intmax_p
fits_sint_p
See: mpfr_fits_sint_p
fits_slong_p
See: mpfr_fits_slong_p
fits_sshort_p
See: mpfr_fits_sshort_p
fits_uint_p
See: mpfr_fits_uint_p
fits_uintmax_p
See: mpfr_fits_uintmax_p
fits_ulong_p
See: mpfr_fits_ulong_p
fits_ushort_p
See: mpfr_fits_ushort_p
flags_clear
See: mpfr_flags_clear
flags_restore
See: mpfr_flags_restore
flags_save
See: mpfr_flags_save
flags_set
See: mpfr_flags_set
flags_test
See: mpfr_flags_test
floor
See: mpfr_floor
fma
See: mpfr_fma
fmma
See: mpfr_fmma
fmms
See: mpfr_fmms
fmod
See: mpfr_fmod
fmod_ui
See: mpfr_fmod_ui
fmodquo
See: mpfr_fmodquo
fms
See: mpfr_fms
fpif_export
See: mpfr_fpif_export
fpif_import
See: mpfr_fpif_import
fprintf
See: mpfr_fprintf
frac
See: mpfr_frac
free_cache
See: mpfr_free_cache
free_cache2
See: mpfr_free_cache2
free_pool
See: mpfr_free_pool
free_str
See: mpfr_free_str
frexp
See: mpfr_frexp
gamma
See: mpfr_gamma
gamma_inc
See: mpfr_gamma_inc
get_d
See: mpfr_get_d
get_d_2exp
See: mpfr_get_d_2exp
get_default_prec
See: mpfr_get_default_prec
get_default_rounding_mode
See: mpfr_get_default_rounding_mode
get_emax
See: mpfr_get_emax
get_emax_max
See: mpfr_get_emax_max
get_emax_min
See: mpfr_get_emax_min
get_emin
See: mpfr_get_emin
get_emin_max
See: mpfr_get_emin_max
get_emin_min
See: mpfr_get_emin_min
get_exp
See: mpfr_get_exp
get_f
See: mpfr_get_f
get_flt
See: mpfr_get_flt
get_patches
See: mpfr_get_patches
get_prec
See: mpfr_get_prec
get_q
See: mpfr_get_q
get_si
See: mpfr_get_si
get_sj
See: mpfr_get_sj
get_str
See: mpfr_get_str
get_str_ndigits
See: mpfr_get_str_ndigits
get_ui
See: mpfr_get_ui
get_uj
See: mpfr_get_uj
get_version
See: mpfr_get_version
get_z
See: mpfr_get_z
get_z_2exp
See: mpfr_get_z_2exp
grandomDeprecated
See: mpfr_grandom
greater_p
See: mpfr_greater_p
greaterequal_p
See: mpfr_greaterequal_p
hypot
See: mpfr_hypot
inexflag_p
See: mpfr_inexflag_p
inf_p
See: mpfr_inf_p
init
See: mpfr_init
init2
See: mpfr_init2
init_set
See: mpfr_init_set
init_set_d
See: mpfr_init_set_d
init_set_f
See: mpfr_init_set_f
init_set_q
See: mpfr_init_set_q
init_set_si
See: mpfr_init_set_si
init_set_str
See: mpfr_init_set_str
init_set_ui
See: mpfr_init_set_ui
init_set_z
See: mpfr_init_set_z
inits
See: mpfr_inits
inits2
See: mpfr_inits2
inp_str
See: mpfr_inp_str
integer_p
See: mpfr_integer_p
j0
See: mpfr_j0
j1
See: mpfr_j1
jn
See: mpfr_jn
less_p
See: mpfr_less_p
lessequal_p
See: mpfr_lessequal_p
lessgreater_p
See: mpfr_lessgreater_p
lgamma
See: mpfr_lgamma
li2
See: mpfr_li2
lngamma
See: mpfr_lngamma
log
See: mpfr_log
log2
See: mpfr_log2
log1p
See: mpfr_log1p
log2p1
See: mpfr_log2p1
log10
See: mpfr_log10
log10p1
See: mpfr_log10p1
log_ui
See: mpfr_log_ui
max
See: mpfr_max
min
See: mpfr_min
min_prec
See: mpfr_min_prec
modf
See: mpfr_modf
mp_memory_cleanup
See: mpfr_mp_memory_cleanup
mul
See: mpfr_mul
mul_2exp
See: mpfr_mul_2exp
mul_2si
See: mpfr_mul_2si
mul_2ui
See: mpfr_mul_2ui
mul_d
See: mpfr_mul_d
mul_q
See: mpfr_mul_q
mul_si
See: mpfr_mul_si
mul_ui
See: mpfr_mul_ui
mul_z
See: mpfr_mul_z
nan_p
See: mpfr_nan_p
nanflag_p
See: mpfr_nanflag_p
neg
See: mpfr_neg
nextabove
See: mpfr_nextabove
nextbelow
See: mpfr_nextbelow
nexttoward
See: mpfr_nexttoward
nrandom
See: mpfr_nrandom
number_p
See: mpfr_number_p
out_str
See: mpfr_out_str
overflow_p
See: mpfr_overflow_p
pow
See: mpfr_pow
pow_si
See: mpfr_pow_si
pow_sj
See: mpfr_pow_sj
pow_ui
See: mpfr_pow_ui
pow_uj
See: mpfr_pow_uj
pow_z
See: mpfr_pow_z
pown
See: mpfr_pown
powr
See: mpfr_powr
prec_round
See: mpfr_prec_round
print_rnd_mode
See: mpfr_print_rnd_mode
printf
See: mpfr_printf
rec_sqrt
See: mpfr_rec_sqrt
regular_p
See: mpfr_regular_p
reldiff
See: mpfr_reldiff
remainder
See: mpfr_remainder
remquo
See: mpfr_remquo
rint
See: mpfr_rint
rint_ceil
See: mpfr_rint_ceil
rint_floor
See: mpfr_rint_floor
rint_round
See: mpfr_rint_round
rint_roundeven
See: mpfr_rint_roundeven
rint_trunc
See: mpfr_rint_trunc
rootDeprecated
See: mpfr_root
rootn_si
See: mpfr_rootn_si
rootn_ui
See: mpfr_rootn_ui
round
See: mpfr_round
roundeven
See: mpfr_roundeven
sec
See: mpfr_sec
sech
See: mpfr_sech
set
See: mpfr_set
set_d
See: mpfr_set_d
set_default_prec
See: mpfr_set_default_prec
set_default_rounding_mode
See: mpfr_set_default_rounding_mode
set_divby0
See: mpfr_set_divby0
set_emax
See: mpfr_set_emax
set_emin
See: mpfr_set_emin
set_erangeflag
See: mpfr_set_erangeflag
set_exp
See: mpfr_set_exp
set_f
See: mpfr_set_f
set_flt
See: mpfr_set_flt
set_inexflag
See: mpfr_set_inexflag
set_inf
See: mpfr_set_inf
set_nan
See: mpfr_set_nan
set_nanflag
See: mpfr_set_nanflag
set_overflow
See: mpfr_set_overflow
set_prec
See: mpfr_set_prec
set_prec_raw
See: mpfr_set_prec_raw
set_q
See: mpfr_set_q
set_si
See: mpfr_set_si
set_si_2exp
See: mpfr_set_si_2exp
set_sj
See: mpfr_set_sj
set_sj_2exp
See: mpfr_set_sj_2exp
set_str
See: mpfr_set_str
set_ui
See: mpfr_set_ui
set_ui_2exp
See: mpfr_set_ui_2exp
set_uj
See: mpfr_set_uj
set_uj_2exp
See: mpfr_set_uj_2exp
set_underflow
See: mpfr_set_underflow
set_z
See: mpfr_set_z
set_z_2exp
See: mpfr_set_z_2exp
set_zero
See: mpfr_set_zero
setsign
See: mpfr_setsign
sgn
See: mpfr_sgn
si_div
See: mpfr_si_div
si_sub
See: mpfr_si_sub
signbit
See: mpfr_signbit
sin
See: mpfr_sin
sin_cos
See: mpfr_sin_cos
sinh
See: mpfr_sinh
sinh_cosh
See: mpfr_sinh_cosh
sinpi
See: mpfr_sinpi
sinu
See: mpfr_sinu
snprintf
See: mpfr_snprintf
sprintf
See: mpfr_sprintf
sqr
See: mpfr_sqr
sqrt
See: mpfr_sqrt
sqrt_ui
See: mpfr_sqrt_ui
strtofr
See: mpfr_strtofr
sub
See: mpfr_sub
sub_d
See: mpfr_sub_d
sub_q
See: mpfr_sub_q
sub_si
See: mpfr_sub_si
sub_ui
See: mpfr_sub_ui
sub_z
See: mpfr_sub_z
subnormalize
See: mpfr_subnormalize
sum
See: mpfr_sum
swap
See: mpfr_swap
tan
See: mpfr_tan
tanh
See: mpfr_tanh
tanpi
See: mpfr_tanpi
tanu
See: mpfr_tanu
total_order_p
See: mpfr_total_order_p
trunc
See: mpfr_trunc
ui_div
See: mpfr_ui_div
ui_pow
See: mpfr_ui_pow
ui_pow_ui
See: mpfr_ui_pow_ui
ui_sub
See: mpfr_ui_sub
underflow_p
See: mpfr_underflow_p
unordered_p
See: mpfr_unordered_p
urandom
See: mpfr_urandom
urandomb
See: mpfr_urandomb
y0
See: mpfr_y0
y1
See: mpfr_y1
yn
See: mpfr_yn
z_sub
See: mpfr_z_sub
zero_p
See: mpfr_zero_p
zeta
See: mpfr_zeta
zeta_ui
See: mpfr_zeta_ui

Type Aliases§

exp_t
See: Exception Related Functions
flags_t
See: mpfr_flags_t
prec_t
See: mpfr_prec_t