Module Mpfr
OCaml bindings for MPFR.
A mpfr_float
is an immutable data structure that contains a mpfr_t number, as well as an optional ternary value, as provided by (and described in) the MPFR library.
A few distinctions are made from the original C library:
- the mpfr_ prefix is ommited for all functions;
- mpfr_init* and mpfr_set* functions are not provided in order to implement these bindings with respect to the functional paradigm (i.e. immutability). Consequently, mpfr_clear* functions are not provided too, and so, the garbage collector is in charge of memory management;
- functions managing the following types are not supported: unsigned long int, uintmax_t, intmax_t, float, long double, __float128, _Decimal64, mpz_t, mpq_t, and mpf_t. Except for mpfr_sqrt_ui and mpfr_fac_ui which are partially supported on the range of the positive values of an OCaml signed integer. In fact, only the OCaml native types (
int
,float
, andstring
) are supported, assuming that afloat
is a double-precision floating-point number and anint
is a 64-bits signed integer. Thus, all functions named with *_ui* or *_d* are renamed here with *_int* or *_float*, respectively; - bindings to functions mpfr_*printf, mpfr_*random*, mpfr_get_patches, mpfr_buildopt_*, and, macros MPFR_VERSION*, mpfr_round_nearest_away are not implemented.
In the sequel, if not provided, optional parameters prec
and rnd
are set to MPFR's defaults precision and rounding mode. Functions which take a precision, or a base as a parameter raise exceptions. See Precision_range
and Base_range
.
Some of the comments below are derived from the MPFR documentation itself. Nevertheless, please refer to the original documentation for further explanations.
exception
Precision_range of int
Raised if precision is not included in [
Mpfr.mpfr_prec_min
;Mpfr.mpfr_prec_max
].
exception
Base_range of int
Raised if base is not included in [
2
;64
], or0
(automatic base detection).
type sign
=
|
Positive
|
Negative
type mpfr_t
Binding to C MPFR mpfr_t type.
type ternary
=
|
Correct_Rounding
|
Greater
|
Lower
Associated to an
mpfr_t
value, aternary
value indicates if it was correctly rounded.
type mpfr_float
= mpfr_t * ternary option
type mpfr_rnd_t
=
|
To_Nearest
|
Toward_Zero
|
Toward_Plus_Infinity
|
Toward_Minus_Infinity
|
Away_From_Zero
|
Faithful
Rounding modes.
type mpfr_flags_t
=
|
Underflow
|
Overflow
|
Nan
|
Inexact
|
Erange
|
Divby0
|
All
Flags as described here.
Initialization
val set_default_prec : int -> unit
Mpfr.set_default_prec p
modifies the default precision to be exactlyp
bits. The precision of a variable means the number of bits used to store its significand. All subsequent calls to any functions will use this precision by default, but previously initialized variables are unaffected. The default precision is set to 53 bits initially.
val get_prec : mpfr_float -> int
Mpfr.get_prec x
returns the precision ofx
. The correspondingMpfr.set_prec x prec
function is not allowed, useMpfr.make_from_mpfr ~prec:prec x
instead.
val make_from_mpfr : ?prec:int -> ?rnd:mpfr_rnd_t -> mpfr_float -> mpfr_float
Return a fresh
mpfr_float
number of precision~prec
(optional), made from anothermpfr_float
number, in direction~rnd
(optional).
val make_from_int : ?prec:int -> ?rnd:mpfr_rnd_t -> int -> mpfr_float
Return a fresh
mpfr_float
number of precision~prec
(optional), made from anint
, in direction~rnd
(optional).
val make_from_float : ?prec:int -> ?rnd:mpfr_rnd_t -> float -> mpfr_float
Return a fresh
mpfr_float
number of precision~prec
(optional), made from afloat
, in direction~rnd
(optional).
val make_from_str : ?prec:int -> ?rnd:mpfr_rnd_t -> ?base:int -> string -> mpfr_float
Mpfr.make_from_str s ~base:b ~prec:p ~rnd:r
returns a freshmpfr_float
of precisionp
from the string values
in baseb
, rounded in directionr
(p
,b
, andr
are optional).
val make_nan : ?prec:int -> unit -> mpfr_float
Return a NaN with precision
~prec
if provided, otherwise default precision is used.
val make_inf : ?prec:int -> sign -> mpfr_float
Return a infinity with precision
~prec
if provided, otherwise default precision is used.
val make_zero : ?prec:int -> sign -> mpfr_float
Return a zero with precision
~prec
if provided, otherwise default precision is used.
Conversion
val get_float : ?rnd:mpfr_rnd_t -> mpfr_float -> float
Conversion to a
float
.
val get_int : ?rnd:mpfr_rnd_t -> mpfr_float -> int
Conversion to an
int
.
val get_float_2exp : ?rnd:mpfr_rnd_t -> mpfr_float -> float * int
Mpfr.get_float_2exp x
returns(n, exp)
such that0.5 <= |n| < 1
andn
times 2 raised toexp
equalsx
rounded to float precision.
val get_mpfr_2exp : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float * int
Mpfr.get_mpfr_2exp x
returns(n, exp)
such that0.5 <= |n| < 1
andn
times 2 raised toexp
equalsx
rounded to~prec
precision.
val get_str : ?rnd:mpfr_rnd_t -> ?base:int -> ?size:int -> mpfr_float -> string * string
Mpfr.get_str ~rnd:r ~base:b ~size:s x
convertsx
to a tuple(frac, exp)
, wherefrac
is a fraction (a string of digits in baseb
) with rounding to directionr
, andexp
is an exponent.s
is the number of significand digits output infrac
. Ifs
is zero, the number of digits of the significand is chosen large enough so that re-reading the printed value with the same precision, assuming both output and input use rounding to nearest, will recover the original value ofx
. Decimal is the default base and default size is zero.
val get_formatted_str : ?rnd:mpfr_rnd_t -> ?base:int -> ?size:int -> mpfr_float -> string
Mpfr.get_formatted_str
is identical toMpfr.get_str
except that it returns a full-formatted string (equivalent to mpfr_printf("%.Re", x)).
val fits_int_p : ?rnd:mpfr_rnd_t -> mpfr_float -> bool
Return true if the
mpfr_float
would fit in aint
, when rounded to an integer in the direction~rnd
.
Basic Arithmetic
val add : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Addition of two
mpfr_float
.
val add_int : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> int -> mpfr_float
Addition of a
mpfr_float
and anint
.
val add_float : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> float -> mpfr_float
Addition of a
mpfr_float
and afloat
.
val sub : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Subtraction of two
mpfr_float
.
val sub_int : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> int -> mpfr_float
Subtraction of a
mpfr_float
and anint
.
val int_sub : ?rnd:mpfr_rnd_t -> ?prec:int -> int -> mpfr_float -> mpfr_float
Subtraction of an
int
and ampfr_float
.
val sub_float : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> float -> mpfr_float
Addition of a
mpfr_float
and afloat
.
val float_sub : ?rnd:mpfr_rnd_t -> ?prec:int -> float -> mpfr_float -> mpfr_float
Subtraction of a
float
and anmpfr_float
.
val mul : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Multiplication of two
mpfr_float
.
val mul_int : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> int -> mpfr_float
Multiplication of a
mpfr_float
and anint
.
val mul_float : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> float -> mpfr_float
Multiplication of an
int
and ampfr_float
.
val div : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Division of two
mpfr_float
.
val div_int : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> int -> mpfr_float
Division of a
mpfr_float
by anint
.
val int_div : ?rnd:mpfr_rnd_t -> ?prec:int -> int -> mpfr_float -> mpfr_float
Division of an
int
by ampfr_float
.
val div_float : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> float -> mpfr_float
Division of an
int
by ampfr_float
.
val float_div : ?rnd:mpfr_rnd_t -> ?prec:int -> float -> mpfr_float -> mpfr_float
Division of a
float
by ampfr_float
.
val sqrt : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the square root of a
mpfr_float
number.
val sqrt_int : ?rnd:mpfr_rnd_t -> ?prec:int -> int -> mpfr_float
Return the square root of an
int
. Returnnan
if negative.
val rec_sqrt : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the reciprocal square root of an
mpfr_float
number.
val cbrt : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Returns the cubic root of an
mpfr_float
number.
val rootn_int : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> int -> mpfr_float
Mpfr.rootn_int x k
returns thek
-th root ofx
.
val pow : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.pow x y
returnsx
raised toy
.
val pow_int : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> int -> mpfr_float
Mpfr.pow_int x y
returnsx
raised toy
.
val neg : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Compute the negation of an
mpfr_float
number.
val abs : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Compute the absolute value of an
mpfr_float
number.
val dim : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.dim x y
returs the positive difference ofx
andy
, i.e.,x - y
ifx > y
,+0
ifx <= y
, and NaN ifx
ory
is NaN.
val mul_2int : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> int -> mpfr_float
Mpfr.mul_2int x y
returnsx
times 2 raised toy
.
val div_2int : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> int -> mpfr_float
Mpfr.div_2int x y
returnsx
divided by 2 raised toy
.
Comparison
val cmp : mpfr_float -> mpfr_float -> int
Mpfr.cmp a b
returns a positive value ifa
>b
, zero ifa
=b
, and a negative value ifa
<b
. If one of the operands is NaN, set theErange
flag and return zero.
val cmp_int : mpfr_float -> int -> int
Mpfr.cmp_int a b
comparesa
andb
. Similar as above.
val cmp_float : mpfr_float -> float -> int
Mpfr.cmp_float a b
comparesa
andb
. Similar as above.
val cmp_int_2exp : mpfr_float -> int -> int -> int
Mpfr.cmp_int_2exp a b e
comparesa
andb
multiplied by two to the powere
. Similar as above.
val cmpabs : mpfr_float -> mpfr_float -> int
Mpfr.cmpabs a b
returns a positive value if|a|
>|b|
, zero if|a|
=|b|
, and a negative value if|a|
<|b|
.
val nan_p : mpfr_float -> bool
Its a NaN.
val inf_p : mpfr_float -> bool
Its an infinity.
val number_p : mpfr_float -> bool
Its a ordinary number (i.e., neither NaN nor an infinity).
val zero_p : mpfr_float -> bool
Its a zero.
val regular_p : mpfr_float -> bool
Its a regular number (i.e., neither NaN, nor an infinity nor zero).
val sgn : mpfr_float -> sign
Return the sign of a
mpfr_float
number.
val greater_p : mpfr_float -> mpfr_float -> bool
Operator
>
in MPFR syntax style.
val greaterequal_p : mpfr_float -> mpfr_float -> bool
Operator
>=
in MPFR syntax style.
val less_p : mpfr_float -> mpfr_float -> bool
Operator
<
in MPFR syntax style.
val lessequal_p : mpfr_float -> mpfr_float -> bool
Operator
<=
in MPFR syntax style.
val equal_p : mpfr_float -> mpfr_float -> bool
Operator
=
in MPFR syntax style.
val lessgreater_p : mpfr_float -> mpfr_float -> bool
Operator
<>
in MPFR syntax style.
val unordered_p : mpfr_float -> mpfr_float -> bool
Return true if the operands are comparable (i.e. one of them is a NaN), false otherwise.
Special
val log : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the natural logarithm of a
mpfr_float
.
val log_int : ?rnd:mpfr_rnd_t -> ?prec:int -> int -> mpfr_float
Return the natural logarithm of an
int
.
val log2 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the log2 of a
mpfr_float
.
val log10 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the log10 of a
mpfr_float
.
val exp : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the exponential of a
mpfr_float
.
val exp2 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the 2 power of a
mpfr_float
.
val exp10 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the 10 power of a
mpfr_float
.
val cos : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the cosine of a
mpfr_float
.
val sin : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the sine of a
mpfr_float
.
val tan : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the tangent of a
mpfr_float
.
val sin_cos : ?rnd:mpfr_rnd_t -> ?sprec:int -> ?cprec:int -> mpfr_float -> mpfr_float * mpfr_float
Return simultaneously the sine and cosine of an
mpfr_float
number.
val sec : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the secant of a
mpfr_float
.
val csc : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the cosecant of a
mpfr_float
.
val cot : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the cotangent of a
mpfr_float
.
val acos : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the arc-cosine of a
mpfr_float
.
val asin : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the arc-sine of a
mpfr_float
.
val atan : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the arc-tangent of a
mpfr_float
.
val atan2 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.atan2 x y
returns the arc-tangent2 of ax
andy
.
val cosh : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the hyperbolic cosine of a
mpfr_float
.
val sinh : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the hyperbolic sine of a
mpfr_float
.
val tanh : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the hyperbolic tangent of a
mpfr_float
.
val sinh_cosh : ?rnd:mpfr_rnd_t -> ?sprec:int -> ?cprec:int -> mpfr_float -> mpfr_float * mpfr_float
Return simultaneously the sine and cosine of an
mpfr_float
number.
val sech : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the hyperbolic secant of a
mpfr_float
.
val csch : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the hyperboloc cosecant of a
mpfr_float
.
val coth : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the hyperbolic cotangent of a
mpfr_float
.
val acosh : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the inverse hyperbolic cosine of a
mpfr_float
.
val asinh : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the inverse hyperbolic sine of a
mpfr_float
.
val atanh : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the inverse hyperbolic tangent of a
mpfr_float
.
val fac_int : ?rnd:mpfr_rnd_t -> ?prec:int -> int -> mpfr_float
Return the factorial of an
int
. Return NaN if input is negative.
val log1p : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the logarithm of one plus a
mpfr_float
.
val expm1 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the exponential of a
mpfr_float
followed by a subtraction by one.
val eint : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the exponential integral of a
mpfr_float
.
val li2 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the real part of the dilogarithm of a
mpfr_float
.
val gamma : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the Gamma function on a
mpfr_float
.
val gamma_inc : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.gamma_inc x y
returns the incomplete Gamma function onx
andy
.
val lngamma : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the logarithm of the Gamma function on a
mpfr_float
.
val lgamma : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float * sign
Return the logarithm of the absolute value of the Gamma function and the sign of the Gamma function on a
mpfr_float
.
val digamma : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the Digamma (sometimes also called Psi) function on a
mpfr_float
.
val beta : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.beta op1 op2
returns the Beta function at argumentsop1
andop2
.
val zeta : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the Riemann Zeta function on a
mpfr_float
.
val erf : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the error function on a
mpfr_float
.
val erfc : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the complementary error function on a
mpfr_float
.
val j0 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the value of the first kind Bessel function of order 0 on a
mpfr_float
.
val j1 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the value of the first kind Bessel function of order 1 on a
mpfr_float
.
val jn : ?rnd:mpfr_rnd_t -> ?prec:int -> int -> mpfr_float -> mpfr_float
Mpfr.jn n x
returns the value of the first kind Bessel function of ordern
onx
. Return NaN ifn
is negative.
val y0 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the value of the second kind Bessel function of order 0 on a
mpfr_float
.
val y1 : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the value of the second kind Bessel function of order 1 on a
mpfr_float
.
val yn : ?rnd:mpfr_rnd_t -> ?prec:int -> int -> mpfr_float -> mpfr_float
Mpfr.jn n x
returns the value of the second kind Bessel function of ordern
onx
. Return NaN ifn
is negative.
val fma : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float -> mpfr_float
Return the fused multiply and add of
mpfr_float
numbers.Mpfr.fma x y z
retunsxy+z
.
val fms : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float -> mpfr_float
Return the fused multiply and sub of
mpfr_float
numbers.Mpfr.fms x y z
retunsxy-z
.
val fmma : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.fmma x y z t
retunsxy+zt
. In case the computation ofxy
overflows or underflows (or that ofzt
), the result is computed as if the two intermediate products were computed with rounding toward zero.
val fmms : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.fmms x y z t
retunsxy-zt
. SeeMpfr.fmma
for further comments
val agm : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Return the arithmetic-geometric mean of a
mpfr_float
number.
val hypot : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Return the Euclidean norm of a
mpfr_float
number.
val ai : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the value of the Airy function Ai on a
mpfr_float
number.
val const_log2 : ?rnd:mpfr_rnd_t -> int -> mpfr_float
Return the logarithm of 2.
val const_pi : ?rnd:mpfr_rnd_t -> int -> mpfr_float
Return the value of Pi.
val const_euler : ?rnd:mpfr_rnd_t -> int -> mpfr_float
Return the value of Euler's constant 0.577...
val const_catalan : ?rnd:mpfr_rnd_t -> int -> mpfr_float
Return the value of Catalan's constant 0.915...
val sum : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float list -> mpfr_float
Return the sum of all the elements of the list.
Input and Output
val out_str : Stdlib.out_channel -> int -> int -> mpfr_float -> mpfr_rnd_t -> unit
Mpfr.out_str stdout b s x Mpfr.To_Nearest
outputsx
, in baseb
, tostdout
, in the directionMpfr.To_Nearest
. The size of the printed output iss
digits long. It usesPrintf.fprintf
andMpfr.get_formatted_string
.
val inp_str : Stdlib.in_channel -> int -> int -> mpfr_rnd_t -> mpfr_float
Mpfr.inp_str stdin b p Mpfr.To_Nearest
returns ampfr_float
number of precisionp
from a string in baseb
read onstdin
. It usesPervasives.input_line
andMpfr.make_from_str
.
val fpif_export : Stdlib.out_channel -> mpfr_float -> unit
Mpfr.fpif_export chan op
exports the numberop
to the streamchan
in a floating-point interchange format. In particular one can export on a 32-bit computer and import on a 64-bit computer, or export on a little-endian computer and import on a big-endian computer. The precision of op and the sign bit of a NaN are stored too.
val fpif_import : Stdlib.in_channel -> mpfr_float
Mpfr.fpif_import chan
imports ampfr_float
number from the streamchan
in a floating-point interchange format (seeMpfr.mpfr_fpif_export
). Note that the precision ofop
is set to the one read from the stream, and the sign bit is always retrieved (even for NaN). If the stored precision is zero or greater thanMpfr.mpfr_prec_max
, the function fails (its ternary value is non-zero) andop
is undefined. If the function fails for another reason,op
is set to NaN. Ternary value is 0 iff the import was successful.
Integer and Remainder Related
val rint : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the nearest representable integer in the direction
~rnd
.
val ceil : ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the next higher or equal representable integer.
val floor : ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the next lower or equal representable integer.
val round : ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the nearest representable integer (rounding halfway cases away from zero as in the roundTiesToAway mode of IEEE 754-2008).
val roundeven : ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the nearest representable integer (rounding halfway cases athe even-rounding rule).
val trunc : ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the nearest representable integer toward zero.
val rint_ceil : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the next higher or equal representable integer. If the result is not representable, it is rounded in the direction
~rnd
val rint_floor : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the next lower or equal representable integer. If the result is not representable, it is rounded in the direction
~rnd
val rint_round : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the nearest representable integer (rounding halfway cases away from zero). If the result is not representable, it is rounded in the direction
~rnd
val rint_roundeven : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the nearest representable integer (rounding halfway cases to the nearest even integer). If the result is not representable, it is rounded in the direction
~rnd
val rint_trunc : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Retrun the input rounded to an integer, i.e. the next integer toward zero. If the result is not representable, it is rounded in the direction
~rnd
val frac : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float
Return the fractional part of an
mpfr_float
(with the same sign).
val modf : ?rnd:mpfr_rnd_t -> ?iprec:int -> ?fprec:int -> mpfr_float -> mpfr_float * mpfr_float
Return simultaneously the integral part and the fractional part of an
mpfr_float
.
val fmod : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.fmod x y
returns the valuex - ny
, wheren
is the integer quotient ofx / y
(rounded toward zero).
val fmodquo : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float * int
Mpfr.fmodquo x y
returns the tuple(x - ny, q)
. SeeMpfr.remquo
for the meanings ofn
andq
.
val remainder : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.remainder x y
returns the valuex - ny
, wheren
is the integer quotient ofx / y
(rounded to the nearest integer, ties rounded to even).
val remquo : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float * int
Mpfr.remquo x y
returns the tuple (x - ny
,q
), wheren
is the integer quotient ofx / y
(rounded to the nearest integer, ties rounded to even), andq
are the low significant bits from the quotientn
with the sign ofx
divided byy
(except if those low bits are all zero, in which case zero is returned).
val integer_p : mpfr_float -> bool
Return true iff the input
mpfr_float
is an integer.
Rounding Related
val set_default_rounding_mode : mpfr_rnd_t -> unit
Set the default rounding mode. The default rounding mode is to nearest initially.
val get_default_rounding_mode : unit -> mpfr_rnd_t
Get the default rounding mode.
val prec_round : ?rnd:mpfr_rnd_t -> mpfr_float -> int -> mpfr_float
Mpfr.prec_round ~rnd:r x p
roundsx
according tor
with precisionp
.
val can_round : mpfr_float -> int -> mpfr_rnd_t -> mpfr_rnd_t -> int -> bool
Assuming
b
is an approximation of an unknownmpfr_number
x
in the directionr1
with error at most two to the power E(b
)-err
where E(b
) is the exponent ofb
, returntrue
ifMpfr.can_round x err r1 r2 p
is able to round correctlyx
to precisionp
with the directionr2
, andfalse
otherwise (including for NaN and Inf).
val min_prec : mpfr_float -> int
Return the minimal number of bits required to store the significand of an
mpfr_float
, and 0 for special values, including 0.
val print_rnd_mode : mpfr_rnd_t -> string
Return a MPFR-like string ("MPFR_RNDD", "MPFR_RNDU", "MPFR_RNDN", "MPFR_RNDZ", "MPFR_RNDA") corresponding to the (
Toward_Minus_Infinity
,Toward_Plus_Infinity
,To_Nearest
,Toward_Zero
,Away_From_Zero
) rounding modes.
val print_ternary : ternary -> string
Return ternary value as a string ("Correct", "Lower", and "Greater" for
Correct_Rounding
,Lower
, andGreater
, respectively).
Miscellaneous
val nexttoward : mpfr_float -> mpfr_float -> mpfr_float
Mpfr.nexttoward x y
returns NaN ifx
ory
is NaN, returns a copy ofx
ifx
andy
are equal. Otherwise, ifx
is different fromy
, return the next floating-point number ofx
(with the precision ofx
and the current exponent range) in the direction ofy
(the infinite values are seen as the smallest and largest floating-point numbers). If the result is zero, it keeps the sign ofx
. No underflow or overflow is generated.
val nextabove : mpfr_float -> mpfr_float
Equivalent to
Mpfr.nexttoward
wherey
is plus infinity.
val nextbelow : mpfr_float -> mpfr_float
Equivalent to
Mpfr.nexttoward
wherey
is minus infinity.
val min : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Return the minimum of two
mpfr_float
. If operands are both NaN, then return NaN. If one operand is NaN, then return the other value. If operands are zeros of different signs, then return -0.
val max : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Return the maximum of two
mpfr_float
. If operands are both NaN, then return NaN. If one operand is NaN, then return the other value. If operands are zeros of different signs, then return +0.
val get_exp : mpfr_float -> int
Return the exponent of a
mpfr_float
.
val set_exp : mpfr_float -> int -> mpfr_float
Return a fresh
mpfr_float
from input with new precision.
val signbit : mpfr_float -> sign
Return the sign of a
mpfr_float
.
val setsign : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> sign -> mpfr_float
Mpfr.setsign x s ~rnd:r
returns a fresh copy ofx
with the signs
, with precisionp
in directionr
.
val copysign : ?rnd:mpfr_rnd_t -> ?prec:int -> mpfr_float -> mpfr_float -> mpfr_float
Mpfr.copysign x y ~rnd:r
returns a fresh copy ofx
with the sign ofy
, with precisionp
in directionr
.
Exception Related
val check_range : ?rnd:mpfr_rnd_t -> mpfr_float -> mpfr_float
Mpfr.check_range ~rnd:r x
assumes thatx
is the correctly-rounded value of some real valuey
in the directionr
and some extended exponent range. Note that this function doesn't modifyx
as mpfr does (it returns a copy, or fails withError
).
val subnormalize : ?rnd:mpfr_rnd_t -> mpfr_float -> mpfr_float
Mpfr.subnormalize ~rnd:r x
roundsx
emulating subnormal number arithmetic: ifx
is outside the subnormal exponent range, it just return a copy ofx
; otherwise, it returns a roudning ofx
to precision EXP(x
)-emin+1 according to rounding moder
. Note that this function doesn't modifyx
as mpfr does (it returns a copy, or fails withError
).
val flags_clear : mpfr_flags_t list -> unit
Mpfr.flags_clear f
clears (lowers) the group of flags specified by maskf
.
val flags_set : mpfr_flags_t list -> unit
Mpfr.flags_clear f
sets (raises) the group of flags specified by maskf
.
val flags_test : mpfr_flags_t list -> mpfr_flags_t list
Return the flags specified by mask.
val flags_save : unit -> mpfr_flags_t list
Return all the flags. It is equivalent to
Mpfr.flags_test [Mpfr.All]
.
val flags_restore : mpfr_flags_t list -> mpfr_flags_t list -> unit
Mpfr.flags_restore f1 f2
restores the flags specified by maskf2
to their state represented in flagsf1
.