pub struct Interval { /* private fields */ }Expand description
An interval with f64 bounds.
It is sometimes referred to as a bare interval in contrast to a decorated interval (DecInterval).
Implementationsยง
Sourceยงimpl Interval
impl Interval
Sourceยงimpl Interval
impl Interval
Sourcepub fn mul_rev_to_pair(self, numerator: Self) -> [Self; 2]
pub fn mul_rev_to_pair(self, numerator: Self) -> [Self; 2]
Returns the reverse multiplication $\numerator \setdivโฒ \self$ (beware the order of the arguments) as an array of two intervals. The operation is also known as two-output division in IEEE Std 1788-2015.
For intervals $๐$ and $๐$, the reverse multiplication is defined as:
$$ ๐ \setdivโฒ ๐ = \set{z โ \R โฃ โy โ ๐ : zy โ ๐}. $$
For comparison, the standard division is defined as:
$$ \begin{align*} ๐ \setdiv ๐ &= \set{x / y โฃ (x, y) โ ๐ ร ๐ โ \set 0} \\ &= \set{z โ \R โฃ โy โ ๐ โ \set 0 : zy โ ๐}. \end{align*} $$
The interval division $๐ / ๐$ is an enclosure of $๐ \setdiv ๐$. A notable difference between two definitions is that when $๐ = ๐ = \set 0$, $๐ \setdiv ๐ = โ $, while $๐ \setdivโฒ ๐ = \R$.
The function returns:
[Interval::EMPTY; 2]if $\numerator \setdivโฒ \self$ is empty;[z,Interval::EMPTY]if $\numerator \setdivโฒ \self$ has one component $๐$, wherezis the tightest enclosure of $๐$;[z1, z2]if $\numerator \setdivโฒ \self$ has two components $๐โ$ and $๐โ$ ordered so that $\sup ๐โ โค \inf ๐โ$, wherez1andz2are the tightest enclosures of $๐โ$ and $๐โ$, respectively.
When $\self โ โ โง \numerator โ โ $, the number of components $\numerator \setdivโฒ \self$ has are summarized as:
| $0 โ \numerator$ | $0 โ \numerator$ | |
|---|---|---|
| $0 โ \self$ | 1 | 0, 1, or 2 |
| $0 โ \self$ | 1 | 1 |
ยงExamples
use inari::{Interval as I, const_interval as c};
let zero = c!(0.0, 0.0);
assert_eq!(zero.mul_rev_to_pair(c!(1.0, 2.0)), [I::EMPTY; 2]);
assert_eq!(zero.mul_rev_to_pair(c!(0.0, 2.0)), [I::ENTIRE, I::EMPTY]);
assert_eq!(zero.mul_rev_to_pair(zero), [I::ENTIRE, I::EMPTY]);
let x = c!(1.0, 2.0);
assert_eq!(I::ENTIRE.mul_rev_to_pair(x), [c!(f64::NEG_INFINITY, 0.0), c!(0.0, f64::INFINITY)]);
assert_eq!(c!(1.0, 1.0).mul_rev_to_pair(x), [x, I::EMPTY]);
assert_eq!(c!(1.0, f64::INFINITY).mul_rev_to_pair(c!(1.0, 1.0)),
[c!(0.0, 1.0), I::EMPTY]);
assert_eq!(c!(-1.0, 1.0).mul_rev_to_pair(c!(1.0, 2.0)),
[c!(f64::NEG_INFINITY, -1.0), c!(1.0, f64::INFINITY)]);
assert_eq!(c!(-1.0, 1.0).mul_rev_to_pair(zero), [I::ENTIRE, I::EMPTY]);Sourcepub fn cancel_minus(self, rhs: Self) -> Self
pub fn cancel_minus(self, rhs: Self) -> Self
Returns the tightest interval z such that rhs $+$ z $โ$ self,
if both self and rhs are bounded and the width of self is greater than or equal to
that of rhs. Otherwise, returns Interval::ENTIRE.
Even when x.cancel_minus(y) is not Interval::ENTIRE, its value is generally
different from x - y, as the latter gives the tightest enclosure of x $-$ y,
while the former does not always enclose x $-$ y.
In such case, x.cancel_minus(y) $โ$ x - y holds, but generally not the equality.
ยงExamples
Getting an enclosure of a partial sum omitting a single term from their total:
use inari::*;
let x = interval!("[0.1, 0.2]").unwrap();
let y = interval!("[0.3, 0.4]").unwrap();
let z = interval!("[0.5, 0.6]").unwrap();
let sum = x + y + z;
assert!((y + z).subset(sum.cancel_minus(x)));
assert!((x + z).subset(sum.cancel_minus(y)));
assert!((x + y).subset(sum.cancel_minus(z)));sum.cancel_minus(x) is a subset of sum - x:
assert!(sum.cancel_minus(x).subset(sum - x));But the inverse does not hold in general:
assert!((sum - x).subset(sum.cancel_minus(x)));sum.cancel_minus(x), etc. returns Interval::ENTIRE when sum is unbounded:
use inari::*;
let x = const_interval!(1.0, 2.0);
let y = const_interval!(3.0, f64::MAX);
let sum = x + y;
assert_eq!(sum.cancel_minus(x), Interval::ENTIRE);
assert_eq!(sum.cancel_minus(y), Interval::ENTIRE);sum.cancel_minus(x) returns Interval::ENTIRE when the width of โsumโ is
less than that of x:
use inari::*;
let x = const_interval!(1.0, 2.0);
let sum = const_interval!(4.0, 4.5);
assert_eq!(sum.cancel_minus(x), Interval::ENTIRE);Sourcepub fn cancel_plus(self, rhs: Self) -> Self
pub fn cancel_plus(self, rhs: Self) -> Self
x.cancel_plus(y) is equivalent to x.cancel_minus(-y).
See Interval::cancel_minus for more information.
Sourcepub fn mul_add(self, rhs: Self, addend: Self) -> Self
pub fn mul_add(self, rhs: Self, addend: Self) -> Self
Returns $(\self ร \rhs) + \addend$.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R^3$ | $\R$ |
Sourcepub fn recip(self) -> Self
pub fn recip(self) -> Self
Returns the multiplicative inverse of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R โ \set 0$ | $\R โ \set 0$ |
Sourceยงimpl Interval
impl Interval
Sourcepub fn contains(self, rhs: f64) -> bool
pub fn contains(self, rhs: f64) -> bool
Returns true if rhs is a member of self: $\rhs โ \self$.
The result is false whenever rhs is infinite or NaN.
ยงExamples
use inari::*;
assert!(const_interval!(1.0, 2.0).contains(1.0));
assert!(!Interval::EMPTY.contains(1.0));
assert!(Interval::ENTIRE.contains(1.0));$ยฑโ$ and NaN are not real numbers, thus do not belong to any interval:
use inari::*;
assert!(!Interval::ENTIRE.contains(f64::INFINITY));
assert!(!Interval::ENTIRE.contains(f64::NEG_INFINITY));
assert!(!Interval::ENTIRE.contains(f64::NAN));Sourcepub fn disjoint(self, rhs: Self) -> bool
pub fn disjoint(self, rhs: Self) -> bool
Returns true if self and rhs are disjoint:
$$ \self โฉ \rhs = โ , $$
or equivalently,
$$ โx โ \self, โy โ \rhs : x โ y, $$
or equivalently,
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | true | true |
| $\self = [a, b]$ | true | $b < c โจ d < a$ |
ยงExamples
use inari::*;
assert!(const_interval!(1.0, 2.0).disjoint(const_interval!(3.0, 4.0)));
assert!(!const_interval!(1.0, 3.0).disjoint(const_interval!(3.0, 4.0)));
assert!(!const_interval!(1.0, 5.0).disjoint(const_interval!(3.0, 4.0)));
assert!(Interval::EMPTY.disjoint(Interval::EMPTY));
assert!(Interval::EMPTY.disjoint(Interval::ENTIRE));Sourcepub fn interior(self, rhs: Self) -> bool
pub fn interior(self, rhs: Self) -> bool
Returns true if self is interior to rhs:
$$ (โx โ \self, โy โ \rhs : x < y) โง (โx โ \self, โy โ \rhs : y < x), $$
or equivalently,
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | true | true |
| $\self = [a, b]$ | false | $c <โฒ a โง b <โฒ d$ |
where $<โฒ$ is defined as:
$$ x <โฒ y :โบ x < y โจ x = y = -โ โจ x = y = +โ. $$
ยงExamples
use inari::*;
assert!(const_interval!(1.1, 1.9).interior(const_interval!(1.0, 2.0)));
assert!(!const_interval!(1.1, 2.0).interior(const_interval!(1.0, 2.0)));
assert!(Interval::EMPTY.interior(Interval::EMPTY));
assert!(Interval::ENTIRE.interior(Interval::ENTIRE));Sourcepub fn is_common_interval(self) -> bool
pub fn is_common_interval(self) -> bool
Returns true if self is nonempty and bounded.
ยงExamples
use inari::*;
assert!(const_interval!(1.0, 2.0).is_common_interval());
assert!(!const_interval!(1.0, f64::INFINITY).is_common_interval());
assert!(!Interval::EMPTY.is_common_interval());
assert!(!Interval::ENTIRE.is_common_interval());Sourcepub fn is_empty(self) -> bool
pub fn is_empty(self) -> bool
Returns true if self is empty: $\self = โ
$.
ยงExamples
use inari::*;
assert!(!const_interval!(1.0, 1.0).is_empty());
assert!(Interval::EMPTY.is_empty());
assert!(!Interval::ENTIRE.is_empty());Sourcepub fn is_entire(self) -> bool
pub fn is_entire(self) -> bool
Returns true if $\self = [-โ, +โ]$.
ยงExamples
use inari::*;
assert!(!const_interval!(1.0, f64::INFINITY).is_entire());
assert!(!Interval::EMPTY.is_entire());
assert!(Interval::ENTIRE.is_entire());Sourcepub fn is_singleton(self) -> bool
pub fn is_singleton(self) -> bool
Returns true if self consists of a single real number:
$$ โx โ โ : \self = [x, x]. $$
The result is false whenever self is empty or unbounded.
ยงExamples
use inari::*;
assert!(const_interval!(1.0, 1.0).is_singleton());
assert!(!const_interval!(1.0, 2.0).is_singleton());
assert!(!Interval::EMPTY.is_singleton());
assert!(!Interval::ENTIRE.is_singleton());0.1 is not representable as a f64 number:
use inari::*;
// The singleton interval that consists of the closest [`f64`] number to 0.1.
assert!(const_interval!(0.1, 0.1).is_singleton());
// The tightest interval that encloses 0.1.
#[cfg(feature = "gmp")]
assert!(!interval!("[0.1, 0.1]").unwrap().is_singleton());Sourcepub fn less(self, rhs: Self) -> bool
pub fn less(self, rhs: Self) -> bool
Returns true if self is weakly less than rhs:
$$ (โx โ \self, โy โ \rhs : x โค y) โง (โy โ \rhs, โx โ \self : x โค y), $$
or equivalently,
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | true | false |
| $\self = [a, b]$ | false | $a โค c โง b โค d$ |
ยงExamples
use inari::*;
assert!(const_interval!(1.0, 2.0).less(const_interval!(3.0, 4.0)));
assert!(const_interval!(1.0, 3.0).less(const_interval!(2.0, 4.0)));
assert!(const_interval!(1.0, 4.0).less(const_interval!(1.0, 4.0)));
assert!(Interval::EMPTY.less(Interval::EMPTY));
assert!(!Interval::EMPTY.less(Interval::ENTIRE));
assert!(!Interval::ENTIRE.less(Interval::EMPTY));
assert!(Interval::ENTIRE.less(Interval::ENTIRE));Sourcepub fn precedes(self, rhs: Self) -> bool
pub fn precedes(self, rhs: Self) -> bool
Returns true if self is to the left of rhs but may touch it:
$$ โx โ \self, โy โ \rhs : x โค y, $$
or equivalently,
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | true | true |
| $\self = [a, b]$ | true | $b โค c$ |
ยงExamples
use inari::*;
assert!(const_interval!(1.0, 2.0).precedes(const_interval!(3.0, 4.0)));
assert!(const_interval!(1.0, 3.0).precedes(const_interval!(3.0, 4.0)));
assert!(!const_interval!(1.0, 3.0).precedes(const_interval!(2.0, 4.0)));
assert!(Interval::EMPTY.precedes(Interval::EMPTY));
assert!(Interval::EMPTY.precedes(Interval::ENTIRE));
assert!(Interval::ENTIRE.precedes(Interval::EMPTY));
assert!(!Interval::ENTIRE.precedes(Interval::ENTIRE));Sourcepub fn strict_less(self, rhs: Self) -> bool
pub fn strict_less(self, rhs: Self) -> bool
Returns true if self is strictly less than rhs:
$$ (โx โ \self, โy โ \rhs : x < y) โง (โy โ \self, โx โ \rhs : x < y), $$
or equivalently,
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | true | false |
| $\self = [a, b]$ | false | $a <โฒ c โง b <โฒ d$ |
where $<โฒ$ is defined as:
$$ x <โฒ y :โบ x < y โจ x = y = -โ โจ x = y = +โ. $$
ยงExamples
use inari::*;
assert!(const_interval!(1.0, 2.0).strict_less(const_interval!(3.0, 4.0)));
assert!(const_interval!(1.0, 3.0).strict_less(const_interval!(2.0, 4.0)));
assert!(!const_interval!(1.0, 4.0).strict_less(const_interval!(2.0, 4.0)));
assert!(const_interval!(1.0, f64::INFINITY).strict_less(const_interval!(2.0, f64::INFINITY)));
assert!(Interval::EMPTY.strict_less(Interval::EMPTY));
assert!(!Interval::EMPTY.strict_less(Interval::ENTIRE));
assert!(!Interval::ENTIRE.strict_less(Interval::EMPTY));
assert!(Interval::ENTIRE.strict_less(Interval::ENTIRE));Sourcepub fn strict_precedes(self, rhs: Self) -> bool
pub fn strict_precedes(self, rhs: Self) -> bool
Returns true if self is strictly to the left of rhs:
$$ โx โ \self, โy โ \rhs : x < y, $$
or equivalently,
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | true | true |
| $\self = [a, b]$ | true | $b < c$ |
Sourcepub fn subset(self, rhs: Self) -> bool
pub fn subset(self, rhs: Self) -> bool
Returns true if self is a subset of rhs:
$$ \self โ \rhs, $$
or equivalently,
$$ โx โ \self, โy โ \rhs : x = y, $$
or equivalently,
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | true | true |
| $\self = [a, b]$ | false | $c โค a โง b โค d$ |
ยงExamples
use inari::*;
assert!(const_interval!(1.0, 2.0).subset(const_interval!(1.0, 2.0)));
assert!(Interval::EMPTY.subset(Interval::EMPTY));
assert!(Interval::EMPTY.subset(Interval::ENTIRE));
assert!(Interval::ENTIRE.subset(Interval::ENTIRE));Sourceยงimpl Interval
impl Interval
Sourcepub fn to_be_bytes(self) -> [u8; 16]
pub fn to_be_bytes(self) -> [u8; 16]
Returns the interchange representation of self in the big-endian byte order.
Sourcepub fn to_le_bytes(self) -> [u8; 16]
pub fn to_le_bytes(self) -> [u8; 16]
Returns the interchange representation of self in the little-endian byte order.
Sourcepub fn to_ne_bytes(self) -> [u8; 16]
pub fn to_ne_bytes(self) -> [u8; 16]
Returns the interchange representation of self in the native byte order of the target platform.
Sourcepub fn try_from_be_bytes(bytes: [u8; 16]) -> Option<Self>
pub fn try_from_be_bytes(bytes: [u8; 16]) -> Option<Self>
Creates an Interval from its interchange representation in the big-endian byte order.
Sourceยงimpl Interval
impl Interval
Sourcepub const FRAC_1_SQRT_2: Self
pub const FRAC_1_SQRT_2: Self
The tightest interval enclosing $1 / \sqrt{2}$.
Sourcepub const FRAC_2_SQRT_PI: Self
pub const FRAC_2_SQRT_PI: Self
The tightest interval enclosing $2 / \sqrt{ฯ}$.
Sourceยงimpl Interval
impl Interval
Sourcepub fn acos(self) -> Self
pub fn acos(self) -> Self
Returns the inverse cosine of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $[-1, 1]$ | $[0, ฯ]$ |
Sourcepub fn acosh(self) -> Self
pub fn acosh(self) -> Self
Returns the inverse hyperbolic cosine of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $[1, โ)$ | $[0, โ)$ |
Sourcepub fn asin(self) -> Self
pub fn asin(self) -> Self
Returns the inverse sine of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $[-1, 1]$ | $[-ฯ/2, ฯ/2]$ |
Sourcepub fn asinh(self) -> Self
pub fn asinh(self) -> Self
Returns the inverse hyperbolic sine of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $\R$ |
Sourcepub fn atan(self) -> Self
pub fn atan(self) -> Self
Returns the inverse tangent of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $(-ฯ/2, ฯ/2)$ |
Sourcepub fn atan2(self, rhs: Self) -> Self
pub fn atan2(self, rhs: Self) -> Self
Returns the angle of the point $(\rhs, \self)$ measured counterclockwise from the positive $x$-axis in the Euclidean plane.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R^2 โ \set{(0, 0)}$ | $(-ฯ, ฯ]$ |
Sourcepub fn atanh(self) -> Self
pub fn atanh(self) -> Self
Returns the inverse hyperbolic tangent of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $(-1, 1)$ | $\R$ |
Sourcepub fn cos(self) -> Self
pub fn cos(self) -> Self
Returns the cosine of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $[-1, 1]$ |
Sourcepub fn cosh(self) -> Self
pub fn cosh(self) -> Self
Returns the hyperbolic cosine of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $[1, โ)$ |
Sourcepub fn exp(self) -> Self
pub fn exp(self) -> Self
Returns self raised to the power of $\e$.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $(0, โ)$ |
Sourcepub fn exp10(self) -> Self
pub fn exp10(self) -> Self
Returns self raised to the power of 10.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $(0, โ)$ |
Sourcepub fn exp2(self) -> Self
pub fn exp2(self) -> Self
Returns self raised to the power of 2.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $(0, โ)$ |
Sourcepub fn ln(self) -> Self
pub fn ln(self) -> Self
Returns the natural logarithm of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $(0, โ)$ | $\R$ |
Sourcepub fn log10(self) -> Self
pub fn log10(self) -> Self
Returns the base-10 logarithm of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $(0, โ)$ | $\R$ |
Sourcepub fn log2(self) -> Self
pub fn log2(self) -> Self
Returns the base-2 logarithm of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $(0, โ)$ | $\R$ |
Sourcepub fn pow(self, rhs: Self) -> Self
pub fn pow(self, rhs: Self) -> Self
Returns self raised to the power of rhs.
The point function is defined as follows:
$$ x^y = \begin{cases} 0 & \for x = 0 โง y > 0, \\ e^{y \ln x} & \for x > 0. \end{cases} $$
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $((0, โ) ร \R) โช (\set 0 ร (0, โ))$ | $[0, โ)$ |
Sourcepub fn powi(self, rhs: i32) -> Self
pub fn powi(self, rhs: i32) -> Self
Returns self raised to the power of rhs.
The point functions are indexed by $n$, and are defined as follows:
$$ x^n = \begin{cases} \overbrace{x ร โฏ ร x}^{n \text{ copies}} & \for n > 0, \\ 1 & \for n = 0, \\ 1 / x^{-n} & \for n < 0. \end{cases} $$
The domains and the ranges of the point functions are:
| Domain | Range | |
|---|---|---|
| $n > 0$, odd | $\R$ | $\R$ |
| $n > 0$, even | $\R$ | $[0, โ)$ |
| $n = 0$ | $\R$ | $\set 1$ |
| $n < 0$, odd | $\R โ \set 0$ | $\R โ \set 0$ |
| $n < 0$, even | $\R โ \set 0$ | $(0, โ)$ |
Sourcepub fn sin(self) -> Self
pub fn sin(self) -> Self
Returns the sine of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $[-1, 1]$ |
Sourcepub fn sinh(self) -> Self
pub fn sinh(self) -> Self
Returns the hyperbolic sine of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $\R$ |
Sourceยงimpl Interval
impl Interval
Sourcepub fn ceil(self) -> Self
pub fn ceil(self) -> Self
Rounds self to the closest integer toward $+โ$.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $\Z$ |
ยงExamples
use inari::*;
assert_eq!(const_interval!(0.2, 1.2).ceil(), const_interval!(1.0, 2.0));
assert_eq!(const_interval!(0.8, 1.8).ceil(), const_interval!(1.0, 2.0));
assert_eq!(const_interval!(-1.2, -0.2).ceil(), const_interval!(-1.0, 0.0));
assert_eq!(const_interval!(-1.8, -0.8).ceil(), const_interval!(-1.0, 0.0));
assert_eq!(Interval::EMPTY.ceil(), Interval::EMPTY);
assert_eq!(Interval::ENTIRE.ceil(), Interval::ENTIRE);See also: Interval::floor, Interval::trunc.
Sourcepub fn floor(self) -> Self
pub fn floor(self) -> Self
Rounds self to the closest integer toward $-โ$.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $\Z$ |
ยงExamples
use inari::*;
assert_eq!(const_interval!(0.2, 1.2).floor(), const_interval!(0.0, 1.0));
assert_eq!(const_interval!(0.8, 1.8).floor(), const_interval!(0.0, 1.0));
assert_eq!(const_interval!(-1.2, -0.2).floor(), const_interval!(-2.0, -1.0));
assert_eq!(const_interval!(-1.8, -0.8).floor(), const_interval!(-2.0, -1.0));
assert_eq!(Interval::EMPTY.floor(), Interval::EMPTY);
assert_eq!(Interval::ENTIRE.floor(), Interval::ENTIRE);See also: Interval::ceil, Interval::trunc.
Sourcepub fn round(self) -> Self
pub fn round(self) -> Self
Rounds self to the closest integer, away from zero in case of ties.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $\Z$ |
ยงExamples
use inari::*;
assert_eq!(const_interval!(0.2, 1.2).round(), const_interval!(0.0, 1.0));
assert_eq!(const_interval!(0.5, 1.5).round(), const_interval!(1.0, 2.0));
assert_eq!(const_interval!(0.8, 1.8).round(), const_interval!(1.0, 2.0));
assert_eq!(const_interval!(-1.2, -0.2).round(), const_interval!(-1.0, 0.0));
assert_eq!(const_interval!(-1.5, -0.5).round(), const_interval!(-2.0, -1.0));
assert_eq!(const_interval!(-1.8, -0.8).round(), const_interval!(-2.0, -1.0));
assert_eq!(Interval::EMPTY.round(), Interval::EMPTY);
assert_eq!(Interval::ENTIRE.round(), Interval::ENTIRE);See also: Interval::round_ties_even.
Sourcepub fn round_ties_even(self) -> Self
pub fn round_ties_even(self) -> Self
Rounds self to the closest integer, the even number in case of ties.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $\Z$ |
ยงExamples
use inari::*;
assert_eq!(const_interval!(0.2, 1.2).round_ties_even(), const_interval!(0.0, 1.0));
assert_eq!(const_interval!(0.5, 1.5).round_ties_even(), const_interval!(0.0, 2.0));
assert_eq!(const_interval!(0.8, 1.8).round_ties_even(), const_interval!(1.0, 2.0));
assert_eq!(const_interval!(-1.2, -0.2).round_ties_even(), const_interval!(-1.0, 0.0));
assert_eq!(const_interval!(-1.5, -0.5).round_ties_even(), const_interval!(-2.0, 0.0));
assert_eq!(const_interval!(-1.8, -0.8).round_ties_even(), const_interval!(-2.0, -1.0));
assert_eq!(Interval::EMPTY.round_ties_even(), Interval::EMPTY);
assert_eq!(Interval::ENTIRE.round_ties_even(), Interval::ENTIRE);See also: Interval::round.
Sourcepub fn sign(self) -> Self
pub fn sign(self) -> Self
Returns the sign of self.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $\set{-1, 0, 1}$ |
Note the difference in definition between f64::signum and this function;
+0.0_f64.signum() and -0.0_f64.signum() return +1.0 and -1.0, respectively,
while the sign of zero is just zero.
ยงExamples
use inari::*;
assert_eq!(const_interval!(-10.0, -0.1).sign(), const_interval!(-1.0, -1.0));
assert_eq!(const_interval!(0.0, 0.0).sign(), const_interval!(0.0, 0.0));
assert_eq!(const_interval!(0.1, 10.0).sign(), const_interval!(1.0, 1.0));
assert_eq!(Interval::EMPTY.sign(), Interval::EMPTY);
assert_eq!(Interval::ENTIRE.sign(), const_interval!(-1.0, 1.0));Sourcepub fn trunc(self) -> Self
pub fn trunc(self) -> Self
Rounds self to the closest integer toward zero.
The domain and the range of the point function are:
| Domain | Range |
|---|---|
| $\R$ | $\Z$ |
ยงExamples
use inari::*;
assert_eq!(const_interval!(0.2, 1.2).trunc(), const_interval!(0.0, 1.0));
assert_eq!(const_interval!(0.8, 1.8).trunc(), const_interval!(0.0, 1.0));
assert_eq!(const_interval!(-1.2, -0.2).trunc(), const_interval!(-1.0, 0.0));
assert_eq!(const_interval!(-1.8, -0.8).trunc(), const_interval!(-1.0, 0.0));
assert_eq!(Interval::EMPTY.trunc(), Interval::EMPTY);
assert_eq!(Interval::ENTIRE.trunc(), Interval::ENTIRE);See also: Interval::ceil, Interval::floor.
Sourceยงimpl Interval
impl Interval
Sourcepub fn inf(self) -> f64
pub fn inf(self) -> f64
Returns the lower bound of self.
The lower bound of an interval $๐$ is:
$$ \inf(๐) = \begin{cases} +โ & \if ๐ = โ , \\ a & \if ๐ = [a, b]. \end{cases} $$
The exact value is returned. When $a = 0$, -0.0 is returned.
ยงExamples
use inari::*;
assert_eq!(const_interval!(-2.0, 3.0).inf(), -2.0);
assert_eq!(Interval::EMPTY.inf(), f64::INFINITY);
assert_eq!(Interval::ENTIRE.inf(), f64::NEG_INFINITY);See also: Interval::sup.
Sourcepub fn mag(self) -> f64
pub fn mag(self) -> f64
Returns the magnitude of self if it is nonempty; otherwise, a NaN.
The magnitude of a nonempty interval $๐ = [a, b]$ is:
$$ \begin{align*} \mag(๐) &= \sup \set{|x| โฃ x โ ๐} \\ &= \max \set{|a|, |b|}. \end{align*} $$
The exact value is returned.
ยงExamples
use inari::*;
assert_eq!(const_interval!(-2.0, 3.0).mag(), 3.0);
assert!(Interval::EMPTY.mag().is_nan());
assert_eq!(Interval::ENTIRE.mag(), f64::INFINITY);See also: Interval::mig.
Sourcepub fn mid(self) -> f64
pub fn mid(self) -> f64
Returns the midpoint of self if it is nonempty; otherwise, a NaN.
The midpoint of a nonempty interval $๐ = [a, b]$ is:
$$ \mid(๐) = \frac{a + b}{2}. $$
As an approximation in f64, it returns:
0.0, if $\self = [-โ, +โ]$;f64::MIN, if $\self = [-โ, b]$, where $b โ \R$;f64::MAX, if $\self = [a, +โ]$, where $a โ \R$;- otherwise, the closest
f64number to $\mid(\self)$, away from zero in case of ties.
ยงExamples
use inari::*;
assert_eq!(const_interval!(-2.0, 3.0).mid(), 0.5);
assert_eq!(const_interval!(f64::NEG_INFINITY, 3.0).mid(), f64::MIN);
assert_eq!(const_interval!(-2.0, f64::INFINITY).mid(), f64::MAX);
assert!(Interval::EMPTY.mid().is_nan());
assert_eq!(Interval::ENTIRE.mid(), 0.0);See also: Interval::rad.
Sourcepub fn mig(self) -> f64
pub fn mig(self) -> f64
Returns the mignitude of self if it is nonempty; otherwise, a NaN.
The mignitude of a nonempty interval $๐ = [a, b]$ is:
$$ \begin{align*} \mig(๐) &= \inf \set{|x| โฃ x โ ๐} \\ &= \begin{cases} \min \set{|a|, |b|} & \if \sgn(a) = \sgn(b), \\ 0 & \otherwise. \end{cases} \end{align*} $$
The exact value is returned.
ยงExamples
use inari::*;
assert_eq!(const_interval!(-2.0, 3.0).mig(), 0.0);
assert_eq!(const_interval!(2.0, 3.0).mig(), 2.0);
assert!(Interval::EMPTY.mig().is_nan());
assert_eq!(Interval::ENTIRE.mig(), 0.0);See also: Interval::mag.
Sourcepub fn rad(self) -> f64
pub fn rad(self) -> f64
Returns the radius of self if it is nonempty; otherwise, a NaN.
The radius of a nonempty interval $๐ = [a, b]$ is:
$$ \rad(๐) = \frac{b - a}{2}. $$
As an approximation in f64, it returns the least f64 number r that satisfies
$\self โ [๐ - ๐, ๐ + ๐]$, where m is the midpoint returned by Self::mid.
ยงExamples
use inari::*;
assert_eq!(const_interval!(-2.0, 3.0).rad(), 2.5);
assert!(Interval::EMPTY.rad().is_nan());
assert_eq!(Interval::ENTIRE.rad(), f64::INFINITY);See also: Interval::mid.
Sourcepub fn sup(self) -> f64
pub fn sup(self) -> f64
Returns the upper bound of self.
The upper bound of an interval $๐$ is:
$$ \sup(๐) = \begin{cases} -โ & \if ๐ = โ , \\ b & \if ๐ = [a, b]. \end{cases} $$
The exact value is returned. When $b = 0$, 0.0 (the
positive zero) is returned.
ยงExamples
use inari::*;
assert_eq!(const_interval!(-2.0, 3.0).sup(), 3.0);
assert_eq!(Interval::EMPTY.sup(), f64::NEG_INFINITY);
assert_eq!(Interval::ENTIRE.sup(), f64::INFINITY);See also: Interval::inf.
Sourcepub fn wid(self) -> f64
pub fn wid(self) -> f64
Returns the width of self if it is nonempty; otherwise, a NaN.
The width of a nonempty interval $๐ = [a, b]$ is:
$$ \wid(๐) = b - a. $$
As an approximation in f64, it returns the closest f64 number toward $+โ$.
ยงExamples
use inari::*;
assert_eq!(const_interval!(-2.0, 3.0).wid(), 5.0);
assert_eq!(const_interval!(-1.0, f64::MAX).wid(), f64::INFINITY);
assert!(Interval::EMPTY.wid().is_nan());
assert_eq!(Interval::ENTIRE.wid(), f64::INFINITY);Sourceยงimpl Interval
impl Interval
Sourcepub fn convex_hull(self, rhs: Self) -> Self
pub fn convex_hull(self, rhs: Self) -> Self
Returns $\hull(\self โช \rhs)$, the tightest interval that contains both self and rhs as its subsets.
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | $โ $ | $[c, d]$ |
| $\self = [a, b]$ | $[a, b]$ | $[\min \set{a, c}, \max \set{b, d}]$ |
Sourcepub fn intersection(self, rhs: Self) -> Self
pub fn intersection(self, rhs: Self) -> Self
Returns $\self โฉ \rhs$, the intersection of self and rhs.
| $\rhs = โ $ | $\rhs = [c, d]$ | |
|---|---|---|
| $\self = โ $ | $โ $ | $โ $ |
| $\self = [a, b]$ | $โ $ | $[\max \set{a, c}, \min \set{b, d}]$ |
Trait Implementationsยง
Sourceยงimpl AddAssign<&Interval> for Interval
impl AddAssign<&Interval> for Interval
Sourceยงfn add_assign(&mut self, other: &Interval)
fn add_assign(&mut self, other: &Interval)
+= operation. Read moreSourceยงimpl AddAssign for Interval
impl AddAssign for Interval
Sourceยงfn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+= operation. Read moreSourceยงimpl DivAssign<&Interval> for Interval
impl DivAssign<&Interval> for Interval
Sourceยงfn div_assign(&mut self, other: &Interval)
fn div_assign(&mut self, other: &Interval)
/= operation. Read moreSourceยงimpl DivAssign for Interval
impl DivAssign for Interval
Sourceยงfn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
/= operation. Read moreSourceยงimpl MulAssign<&Interval> for Interval
impl MulAssign<&Interval> for Interval
Sourceยงfn mul_assign(&mut self, other: &Interval)
fn mul_assign(&mut self, other: &Interval)
*= operation. Read moreSourceยงimpl MulAssign for Interval
impl MulAssign for Interval
Sourceยงfn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*= operation. Read moreSourceยงimpl SubAssign<&Interval> for Interval
impl SubAssign<&Interval> for Interval
Sourceยงfn sub_assign(&mut self, other: &Interval)
fn sub_assign(&mut self, other: &Interval)
-= operation. Read moreSourceยงimpl SubAssign for Interval
impl SubAssign for Interval
Sourceยงfn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-= operation. Read more