Float_interval.MakeSourceBuilds 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.
module Float : Float_sig.SType of the interval bounds.
Type of intervals.
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.
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.
Top interval for a given precision, including infinite and NaN values.
The interval of all finite values in the given precision.
Lattice operators.
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.
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 backward_comp_left_true :
Abstract_interp.Comp.t ->
Float_interval_sig.prec ->
t ->
t ->
t Bottom.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 Bottom.Type.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 backward_add :
Float_interval_sig.prec ->
left:t ->
right:t ->
result:t ->
(t * t) Bottom.Type.or_bottomval backward_sub :
Float_interval_sig.prec ->
left:t ->
right:t ->
result:t ->
(t * t) Bottom.Type.or_bottomBitwise 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.
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.