package frama-c
Install
Dune Dependency
Authors
-
MMichele Alberti
-
TThibaud Antignac
-
GGergö Barany
-
PPatrick Baudin
-
NNicolas Bellec
-
TThibaut Benjamin
-
AAllan Blanchard
-
LLionel Blatter
-
FFrançois Bobot
-
RRichard Bonichon
-
VVincent Botbol
-
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
-
RRemi Lazarini
-
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
-
PPierre Nigron
-
AAnne Pacalet
-
VValentin Perrelle
-
GGuillaume Petiot
-
DDario Pinto
-
VVirgile Prevosto
-
AArmand Puccetti
-
FFélix Ridoux
-
VVirgile Robles
-
JJan Rochel
-
MMuriel Roger
-
JJulien Signoles
-
NNicolas Stouls
-
KKostyantyn Vorobyov
-
BBoris Yakobowski
Maintainers
Sources
sha256=3ac8b38e0dab0e14d6ad0d244d8dfcfb17c912f661c77079096436f48377cf8a
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.S
Signature
type widen_hint = Datatype.Float.Set.t
Hints for the widening: set of relevant thresholds.
val packed_descr : Structural_descr.pack
val pretty : Format.formatter -> t -> unit
val hash : t -> int
Returns 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 : t
The NaN singleton
val pos_infinity : Float_interval_sig.prec -> t
The infinities singleton
val neg_infinity : Float_interval_sig.prec -> t
inject ~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 -> t
Top interval for a given precision, including infinite and NaN values.
val top_finite : Float_interval_sig.prec -> t
The interval of all finite values in the given precision.
Lattice operators.
val widen : ?hint:widen_hint -> Float_interval_sig.prec -> t -> t -> t
val narrow : t -> t -> t Lattice_bounds.or_bottom
val contains_a_zero : t -> bool
val contains_pos_zero : t -> bool
val contains_neg_zero : t -> bool
val contains_non_zero : t -> bool
val contains_pos_infinity : t -> bool
val contains_neg_infinity : t -> bool
val contains_nan : t -> bool
val is_singleton : t -> bool
Returns true
on NaN.
val is_negative : t -> Abstract_interp.Comp.result
is_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.result
val is_infinite : t -> Abstract_interp.Comp.result
val is_not_nan : t -> Abstract_interp.Comp.result
val backward_is_finite :
positive:bool ->
Float_interval_sig.prec ->
t ->
t Lattice_bounds.or_bottom
val backward_is_infinite :
positive:bool ->
Float_interval_sig.prec ->
t ->
t Lattice_bounds.or_bottom
val backward_is_nan : positive:bool -> t -> t Lattice_bounds.or_bottom
has_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.result
val backward_comp_left_true :
Abstract_interp.Comp.t ->
Float_interval_sig.prec ->
t ->
t ->
t Lattice_bounds.or_bottom
backward_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_bottom
backward_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 -> t
val add : Float_interval_sig.prec -> t -> t -> t
val sub : Float_interval_sig.prec -> t -> t -> t
val mul : Float_interval_sig.prec -> t -> t -> t
val div : Float_interval_sig.prec -> t -> t -> t
val exp : Float_interval_sig.prec -> t -> t
val log : Float_interval_sig.prec -> t -> t
val log10 : Float_interval_sig.prec -> t -> t
val sqrt : Float_interval_sig.prec -> t -> t
val pow : Float_interval_sig.prec -> t -> t -> t
val fmod : Float_interval_sig.prec -> t -> t -> t
val cos : Float_interval_sig.prec -> t -> t
val sin : Float_interval_sig.prec -> t -> t
val acos : Float_interval_sig.prec -> t -> t
val asin : Float_interval_sig.prec -> t -> t
val atan : Float_interval_sig.prec -> t -> t
val atan2 : Float_interval_sig.prec -> t -> t -> t
val backward_add :
Float_interval_sig.prec ->
left:t ->
right:t ->
result:t ->
(t * t) Lattice_bounds.or_bottom
val backward_sub :
Float_interval_sig.prec ->
left:t ->
right:t ->
result:t ->
(t * t) Lattice_bounds.or_bottom
val forward_cast : dst:Float_interval_sig.prec -> t -> t
val backward_cast :
src:Float_interval_sig.prec ->
t ->
t Lattice_bounds.or_bottom
val cast_int_to_float :
Float_interval_sig.prec ->
Integer.t option ->
Integer.t option ->
t
Bitwise 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 * t
Subdivides 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
.