@@ -65,6 +65,21 @@ typemax(::Type{Interval{T}}) where T<:Integer = Interval(typemax(T))
65
65
+ (a:: Interval ) = a
66
66
- (a:: Interval ) = Interval (- a. hi, - a. lo)
67
67
68
+ function + (a:: Interval{T} , b:: T ) where {T<: Real }
69
+ isempty (a) && return emptyinterval (T)
70
+ @round (a. lo + b, a. hi + b)
71
+ end
72
+ + (b:: T , a:: Interval{T} ) where {T<: Real } = a+ b
73
+
74
+ function - (a:: Interval{T} , b:: T ) where {T<: Real }
75
+ isempty (a) && return emptyinterval (T)
76
+ @round (a. lo - b, a. hi - b)
77
+ end
78
+ function - (b:: T , a:: Interval{T} ) where {T<: Real }
79
+ isempty (a) && return emptyinterval (T)
80
+ @round (b - a. lo, b - a. hi)
81
+ end
82
+
68
83
function + (a:: Interval{T} , b:: Interval{T} ) where T<: Real
69
84
(isempty (a) || isempty (b)) && return emptyinterval (T)
70
85
@round (a. lo + b. lo, a. hi + b. hi)
77
92
78
93
79
94
# # Multiplication
95
+ function * (x:: T , a:: Interval{T} ) where {T<: Real }
96
+ isempty (a) && return emptyinterval (T)
97
+ (iszero (a) || iszero (x)) && return zero (Interval{T})
98
+
99
+ if x ≥ 0.0
100
+ return @round (a. lo* x, a. hi* x)
101
+ else
102
+ return @round (a. hi* x, a. lo* x)
103
+ end
104
+ end
105
+ * (a:: Interval{T} , x:: T ) where {T<: Real } = x* a
80
106
81
107
function * (a:: Interval{T} , b:: Interval{T} ) where T<: Real
82
108
(isempty (a) || isempty (b)) && return emptyinterval (T)
100
126
101
127
102
128
# # Division
129
+ function / (a:: Interval{T} , x:: T ) where {T<: Real }
130
+ isempty (a) && return emptyinterval (T)
131
+ iszero (x) && return emptyinterval (T)
132
+ iszero (a) && return zero (Interval{T})
133
+
134
+ if x ≥ 0.0
135
+ return @round (a. lo/ x, a. hi/ x)
136
+ else
137
+ return @round (a. hi/ x, a. lo/ x)
138
+ end
139
+ end
103
140
104
141
function inv (a:: Interval{T} ) where T<: Real
105
142
isempty (a) && return emptyinterval (a)
0 commit comments