Skip to content

Commit 07ba9fd

Browse files
eeshan9815lbenet
authored andcommitted
Add extended_div() (#111)
* Add extended_div() * Fix bug * Implement using / and return tuple * Fix test case
1 parent 42ab020 commit 07ba9fd

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

src/IntervalArithmetic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export
4444
RoundTiesToEven, RoundTiesToAway,
4545
cancelminus, cancelplus, isunbounded,
4646
.., @I_str, ±,
47-
pow,
47+
pow, extended_div,
4848
setformat, @format
4949

5050
export

src/intervals/arithmetic.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,23 @@ function /(a::Interval{T}, b::Interval{T}) where T<:Real
193193
end
194194
end
195195

196+
function extended_div(a::Interval{T}, b::Interval{T}) where T<:Real
197+
198+
S = typeof(a.lo / b.lo)
199+
if 0 < b.hi && 0 > b.lo && 0 a
200+
if a.hi < 0
201+
return (Interval(-Inf, a.hi / b.hi), Interval(a.hi / b.lo, Inf))
202+
203+
elseif a.lo > 0
204+
return (Interval(-Inf, a.lo / b.lo), Interval(a.lo / b.hi, Inf))
205+
206+
end
207+
208+
else
209+
return (a / b, emptyinterval(S))
210+
end
211+
end
212+
196213
//(a::Interval, b::Interval) = a / b # to deal with rationals
197214

198215

test/interval_tests/numeric.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,19 @@ setprecision(Interval, Float64)
3434
@test Interval(0.0, 1.0)/Interval(0.0,1.0) == Interval(0.0, Inf)
3535
@test Interval(-1.0, 1.0)/Interval(0.0,1.0) == entireinterval(c)
3636
@test Interval(-1.0, 1.0)/Interval(-1.0,1.0) == entireinterval(c)
37+
38+
@test extended_div(interval(-30.0,-15.0), interval(-5.0,-3.0)) == (interval(3.0, 10.0), emptyinterval(c))
39+
@test extended_div(@interval(-30,-15) , @interval(-5,-3)) == (interval(3.0, 10.0), emptyinterval(c))
40+
@test extended_div(1.0..2.0, 0.1..1.0) == (interval(1, 20.000000000000004), emptyinterval(c))
41+
@test extended_div(a, c) == (interval(2.4999999999999998e-02, 4.4e+00), emptyinterval(c))
42+
@test extended_div(c, interval(4.0)) == (interval(6.25e-02, 1e+00), emptyinterval(c))
43+
@test extended_div(c, zero(c)) == (emptyinterval(c), emptyinterval(c))
44+
@test extended_div(interval( 0.0, 1.0), interval(0.0,1.0)) == (interval(0.0, Inf), emptyinterval(c))
45+
@test extended_div(interval(-1.0, 1.0), interval(0.0,1.0)) == (entireinterval(c), emptyinterval(c))
46+
@test extended_div(interval(-1.0, 1.0), interval(-1.0,1.0)) == (entireinterval(c), emptyinterval(c))
47+
@test extended_div(interval(1.0, 2.0), interval(-4.0, 4.0)) == ((-.. -0.25), (0.25..∞))
48+
@test extended_div(interval(-2.0, -1.0), interval(-2.0, 4.0)) == ((-.. -0.25), (0.5..∞))
49+
3750
a = @interval(1.e-20)
3851
@test a == Interval(1.0e-20, 1.0000000000000001e-20)
3952
@test diam(a) == eps(1.e-20)

0 commit comments

Comments
 (0)