package frama-c
Install
dune-project
Dependency
Authors
-
MMichele Alberti
-
TThibaud Antignac
-
GGergö Barany
-
PPatrick Baudin
-
TThibaut Benjamin
-
AAllan Blanchard
-
LLionel Blatter
-
FFrançois Bobot
-
RRichard Bonichon
-
QQuentin Bouillaguet
-
DDavid Bühler
-
ZZakaria Chihani
-
LLoïc Correnson
-
JJulien Crétin
-
PPascal Cuoq
-
ZZaynah Dargaye
-
BBasile Desloges
-
JJean-Christophe Filliâtre
-
PPhilippe Herrmann
-
MMaxime Jacquemin
-
FFlorent Kirchner
-
AAlexander Kogtenkov
-
TTristan Le Gall
-
JJean-Christophe Léchenet
-
MMatthieu Lemerre
-
DDara Ly
-
DDavid Maison
-
CClaude Marché
-
AAndré Maroneze
-
TThibault Martin
-
FFonenantsoa Maurica
-
MMelody Méaulle
-
BBenjamin Monate
-
YYannick Moy
-
AAnne Pacalet
-
VValentin Perrelle
-
GGuillaume Petiot
-
DDario Pinto
-
VVirgile Prevosto
-
AArmand Puccetti
-
FFélix Ridoux
-
VVirgile Robles
-
MMuriel Roger
-
JJulien Signoles
-
NNicolas Stouls
-
KKostyantyn Vorobyov
-
BBoris Yakobowski
Maintainers
Sources
sha256=5b13574a16a58971c27909bee94ae7f37b17d897852b40c768a3d4e2e09e39d2
doc/frama-c.kernel/Frama_c_kernel/Float_interval/Make/index.html
Module Float_interval.Make
Builds a semantics of floating-point intervals for different precisions, from a module providing the floating-point numbers used for the bounds of the intervals. Supports NaN and infinite values.
Parameters
module Float : Float_sig.SSignature
val packed_descr : Structural_descr.packval pretty : Format.formatter -> t -> unitval hash : t -> intReturns the bounds of the float interval, (or None if the argument is exactly NaN), and a boolean indicating the possibility that the value may be NaN.
val nan : tThe NaN singleton
val pos_infinity : Float_interval_sig.prec -> tThe infinities singleton
val neg_infinity : Float_interval_sig.prec -> tinject ~nan b e creates the floating-point interval b..e, plus NaN if nan is true. b and e must be ordered, and not NaN. They can be infinite.
val top : Float_interval_sig.prec -> tTop interval for a given precision, including infinite and NaN values.
val top_finite : Float_interval_sig.prec -> tThe interval of all finite values in the given precision.
Lattice operators.
val widen : Float.widen_hints -> Float_interval_sig.prec -> t -> t -> tval narrow : t -> t -> t Lattice_bounds.or_bottomval contains_a_zero : t -> boolval contains_pos_zero : t -> boolval contains_neg_zero : t -> boolval contains_non_zero : t -> boolval contains_pos_infinity : t -> boolval contains_neg_infinity : t -> boolval contains_nan : t -> boolval is_singleton : t -> boolReturns true on NaN.
val is_negative : t -> Abstract_interp.Comp.resultis_negative f returns True iff all values in f are negative; False iff all values are positive; and Unknown otherwise. Note that we do not keep sign information for NaN, so if f may contain NaN, the result is always Unknown.
val is_finite : t -> Abstract_interp.Comp.resultval is_infinite : t -> Abstract_interp.Comp.resultval is_not_nan : t -> Abstract_interp.Comp.resultval backward_is_finite :
positive:bool ->
Float_interval_sig.prec ->
t ->
t Lattice_bounds.or_bottomval backward_is_infinite :
positive:bool ->
Float_interval_sig.prec ->
t ->
t Lattice_bounds.or_bottomval backward_is_nan : positive:bool -> t -> t Lattice_bounds.or_bottomhas_greater_min_bound f1 f2 returns 1 if the interval f1 has a better minimum bound (i.e. greater) than the interval f2.
has_smaller_max_bound f1 f2 returns 1 if the interval f1 has a better maximum bound (i.e. lower) than the interval f2.
val forward_comp :
Abstract_interp.Comp.t ->
t ->
t ->
Abstract_interp.Comp.resultval backward_comp_left_true :
Abstract_interp.Comp.t ->
Float_interval_sig.prec ->
t ->
t ->
t Lattice_bounds.or_bottombackward_comp_left_true op prec f1 f2 attempts to reduce f1 into f1' so that the relation f1' op f2 holds. prec is the precision of f1 and f1', but not necessarily of f2.
val backward_comp_left_false :
Abstract_interp.Comp.t ->
Float_interval_sig.prec ->
t ->
t ->
t Lattice_bounds.or_bottombackward_comp_left_false op prec f1 f2 attempts to reduce f1 into f1' so that the relation f1' op f2 doesn't holds. prec is the precision of f1 and f1', but not necessarily of f2.
val abs : Float_interval_sig.prec -> t -> tval add : Float_interval_sig.prec -> t -> t -> tval sub : Float_interval_sig.prec -> t -> t -> tval mul : Float_interval_sig.prec -> t -> t -> tval div : Float_interval_sig.prec -> t -> t -> tval exp : Float_interval_sig.prec -> t -> tval log : Float_interval_sig.prec -> t -> tval log10 : Float_interval_sig.prec -> t -> tval sqrt : Float_interval_sig.prec -> t -> tval pow : Float_interval_sig.prec -> t -> t -> tval fmod : Float_interval_sig.prec -> t -> t -> tval cos : Float_interval_sig.prec -> t -> tval sin : Float_interval_sig.prec -> t -> tval acos : Float_interval_sig.prec -> t -> tval asin : Float_interval_sig.prec -> t -> tval atan : Float_interval_sig.prec -> t -> tval atan2 : Float_interval_sig.prec -> t -> t -> tval backward_add :
Float_interval_sig.prec ->
left:t ->
right:t ->
result:t ->
(t * t) Lattice_bounds.or_bottomval backward_sub :
Float_interval_sig.prec ->
left:t ->
right:t ->
result:t ->
(t * t) Lattice_bounds.or_bottomval forward_cast : dst:Float_interval_sig.prec -> t -> tval backward_cast :
src:Float_interval_sig.prec ->
t ->
t Lattice_bounds.or_bottomval cast_int_to_float :
Float_interval_sig.prec ->
Integer.t option ->
Integer.t option ->
tBitwise reinterpretation of a floating-point interval of double precision into consecutive ranges of integers.
Bitwise reinterpretation of a floating-point interval of single precision into consecutive ranges of integers.
val subdivide : Float_interval_sig.prec -> t -> t * tSubdivides an interval of a given precision into two intervals. Raises Abstract_interp.Can_not_subdiv if it can't be subdivided. prec must be Single or Double.