@@ -162,8 +162,8 @@ function inv(a::Interval{T}) where T<:Real
162
162
isempty (a) && return emptyinterval (a)
163
163
164
164
if zero (T) ∈ a
165
- a. lo < zero (T) == a. hi && return @round (- Inf , inv (a. lo))
166
- a. lo == zero (T) < a. hi && return @round (inv (a. hi), Inf )
165
+ a. lo < zero (T) == a. hi && return @round (T ( - Inf ) , inv (a. lo))
166
+ a. lo == zero (T) < a. hi && return @round (inv (a. hi), T ( Inf ) )
167
167
a. lo < zero (T) < a. hi && return entireinterval (T)
168
168
a == zero (a) && return emptyinterval (T)
169
169
end
@@ -195,14 +195,14 @@ function /(a::Interval{T}, b::Interval{T}) where T<:Real
195
195
196
196
if iszero (b. lo)
197
197
198
- a. lo >= zero (T) && return @round (a. lo/ b. hi, Inf )
199
- a. hi <= zero (T) && return @round (- Inf , a. hi/ b. hi)
198
+ a. lo >= zero (T) && return @round (a. lo/ b. hi, T ( Inf ) )
199
+ a. hi <= zero (T) && return @round (T ( - Inf ) , a. hi/ b. hi)
200
200
return entireinterval (S)
201
201
202
202
elseif iszero (b. hi)
203
203
204
- a. lo >= zero (T) && return @round (- Inf , a. lo/ b. lo)
205
- a. hi <= zero (T) && return @round (a. hi/ b. lo, Inf )
204
+ a. lo >= zero (T) && return @round (T ( - Inf ) , a. lo/ b. lo)
205
+ a. hi <= zero (T) && return @round (a. hi/ b. lo, T ( Inf ) )
206
206
return entireinterval (S)
207
207
208
208
else
@@ -218,10 +218,10 @@ function extended_div(a::Interval{T}, b::Interval{T}) where T<:Real
218
218
S = typeof (a. lo / b. lo)
219
219
if 0 < b. hi && 0 > b. lo && 0 ∉ a
220
220
if a. hi < 0
221
- return (Interval (- Inf , a. hi / b. hi), Interval (a. hi / b. lo, Inf ))
221
+ return (Interval (T ( - Inf ) , a. hi / b. hi), Interval (a. hi / b. lo, T ( Inf ) ))
222
222
223
223
elseif a. lo > 0
224
- return (Interval (- Inf , a. lo / b. lo), Interval (a. lo / b. hi, Inf ))
224
+ return (Interval (T ( - Inf ) , a. lo / b. lo), Interval (a. lo / b. hi, T ( Inf ) ))
225
225
226
226
end
227
227
elseif 0 ∈ a && 0 ∈ b
@@ -394,7 +394,7 @@ The default is the true midpoint at `α = 0.5`.
394
394
395
395
Assumes 0 ≤ α ≤ 1.
396
396
397
- Warning: if the parameter `α = 0.5` is explicitely set, the behavior differs
397
+ Warning: if the parameter `α = 0.5` is explicitly set, the behavior differs
398
398
from the default case if the provided `Interval` is not finite, since when
399
399
`α` is provided `mid` simply replaces `+∞` (respectively `-∞`) by `prevfloat(+∞)`
400
400
(respecively `nextfloat(-∞)`) for the computation of the intermediate point.
@@ -403,16 +403,18 @@ function mid(a::Interval{T}, α) where T
403
403
404
404
isempty (a) && return convert (T, NaN )
405
405
406
- lo = (a. lo == - ∞ ? nextfloat (- ∞ ) : a. lo)
407
- hi = (a. hi == + ∞ ? prevfloat (+ ∞ ) : a. hi)
406
+ lo = (a. lo == - ∞ ? nextfloat (T ( - ∞) ) : a. lo)
407
+ hi = (a. hi == + ∞ ? prevfloat (T ( + ∞) ) : a. hi)
408
408
409
- midpoint = α * (hi - lo) + lo
409
+ β = convert (T, α)
410
+
411
+ midpoint = β * (hi - lo) + lo
410
412
isfinite (midpoint) && return midpoint
411
413
#= Fallback in case of overflow: hi - lo == +∞.
412
414
This case can not be the default one as it does not pass several
413
415
IEEE1788-2015 tests for small floats.
414
416
=#
415
- return (1 - α ) * lo + α * hi
417
+ return (1 - β ) * lo + β * hi
416
418
end
417
419
418
420
"""
@@ -432,13 +434,13 @@ function mid(a::Interval{T}) where T
432
434
a. lo == - ∞ && return nextfloat (a. lo)
433
435
a. hi == + ∞ && return prevfloat (a. hi)
434
436
435
- midpoint = 0.5 * (a. lo + a. hi)
437
+ midpoint = (a. lo + a. hi) / 2
436
438
isfinite (midpoint) && return midpoint
437
439
#= Fallback in case of overflow: a.hi + a.lo == +∞ or a.hi + a.lo == -∞.
438
440
This case can not be the default one as it does not pass several
439
441
IEEE1788-2015 tests for small floats.
440
442
=#
441
- return 0.5 * a. lo + 0.5 * a. hi
443
+ return a. lo / 2 + a. hi / 2
442
444
end
443
445
444
446
mid (a:: Interval{Rational{T}} ) where T = (1 // 2 ) * (a. lo + a. hi)
0 commit comments