Skip to main content

Interval

Struct Interval 

Source
pub struct Interval {
    pub lo: Number,
    pub hi: Number,
}
Expand description

Closed interval [lo, hi] with outward rounding on operations.

EMPTY is encoded as lo > hi (specifically lo = +∞, hi = -∞). ENTIRE is (-∞, +∞). Construction helpers normalize these for you.

Fields§

§lo: Number§hi: Number

Implementations§

Source§

impl Interval

Source

pub const ENTIRE: Interval

[-∞, +∞] — represents “no information”.

Source

pub const EMPTY: Interval

— empty set; sentinel for infeasibility.

Source

pub fn new(lo: Number, hi: Number) -> Self

Closed interval [lo, hi]. NaN endpoints or lo > hi collapse to Self::EMPTY so downstream rules don’t have to special- case malformed input.

Source

pub fn point(x: Number) -> Self

Degenerate interval [x, x]. NaN collapses to EMPTY.

Source

pub fn is_empty(&self) -> bool

Source

pub fn is_entire(&self) -> bool

Source

pub fn contains(&self, x: Number) -> bool

true iff x ∈ [lo, hi].

Source

pub fn contains_zero(&self) -> bool

Source

pub fn width(&self) -> Number

hi - lo, or 0 for empty. May be +∞.

Source

pub fn intersect(self, other: Self) -> Self

[max(self.lo, other.lo), min(self.hi, other.hi)]. Empty if the result is malformed — this is the right semantics for FBBT’s “narrow against the constraint” step.

Source

pub fn hull(self, other: Self) -> Self

Convex hull [min(lo, lo), max(hi, hi)]. Empty if both inputs are empty.

Source

pub fn add(self, rhs: Self) -> Self

Source

pub fn sub(self, rhs: Self) -> Self

Source

pub fn neg(self) -> Self

Source

pub fn mul(self, rhs: Self) -> Self

Interval multiplication — the classic four-corner formula.

Source

pub fn div(self, rhs: Self) -> Self

Division — returns ENTIRE (rather than a split / extended interval) when 0 ∈ rhs, since FBBT’s reverse rules elsewhere can recover useful information without the union-of-intervals complexity here.

Source

pub fn pow_uint(self, n: u32) -> Self

[lo, hi]^n for non-negative integer n. Handles the non-monotone case n even, 0 ∈ self correctly.

Source

pub fn sqrt(self) -> Self

√[lo, hi]. Negative lo clipped to 0 (matches mathematical domain). Empty input or fully-negative interval → EMPTY.

Source

pub fn exp(self) -> Self

exp([lo, hi]) — monotone increasing.

Source

pub fn ln(self) -> Self

ln([lo, hi]) — monotone increasing on x > 0. lo ≤ 0 is clipped to the smallest positive finite (return -∞ on the low side). Fully-non-positive intervals → EMPTY.

Source

pub fn abs(self) -> Self

|[lo, hi]|.

Source

pub fn sin(self) -> Self

sin([lo, hi]). When the interval is wider than 2π or wraps over both a peak and a trough we return [-1, 1]; otherwise we test against the local extrema. A loose-but-sound choice.

Source

pub fn cos(self) -> Self

cos([lo, hi]).

Source

pub fn min(self, other: Self) -> Self

Element-wise min(self, other).

Source

pub fn max(self, other: Self) -> Self

Element-wise max(self, other).

Trait Implementations§

Source§

impl Clone for Interval

Source§

fn clone(&self) -> Interval

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Interval

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Interval

Source§

fn eq(&self, other: &Interval) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Interval

Source§

impl StructuralPartialEq for Interval

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more