Skip to content

Commit 13f5612

Browse files
committed
Additional division changes
1 parent 2aec095 commit 13f5612

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

src/FixedPointDecimals.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,26 +138,26 @@ end
138138
*{T, f}(x::Integer, y::FD{T, f}) = reinterpret(FD{T, f}, T(x * y.i))
139139
*{T, f}(x::FD{T, f}, y::Integer) = reinterpret(FD{T, f}, T(x.i * y))
140140

141-
# TODO. this is probably wrong sometimes.
142141
function /{T, f}(x::FD{T, f}, y::FD{T, f})
143142
powt = coefficient(FD{T,f})
144143
quotient, remainder = divrem(x.i, y.i)
145144
reinterpret(FD{T, f}, T(widemul(quotient, powt) + round(T, remainder // y.i * powt)))
146145
end
147146

148-
# these functions are needed to avoid InexactError when converting from the integer type
147+
# These functions allow us to perform division with integers outside of the range of the
148+
# FixedDecimal.
149149
function /{T, f}(x::Integer, y::FD{T, f})
150150
powt = coefficient(FD{T,f})
151-
xi, yi = checked_mul(x, powt), y.i
151+
xi, yi = widemul(x, powt), y.i
152152
quotient, remainder = divrem(xi, yi)
153-
reinterpret(FD{T, f}, T(widemul(quotient, powt) + round(T, remainder // yi * powt)))
153+
reinterpret(FD{T, f}, T(quotient * powt + round(T, remainder // yi * powt)))
154154
end
155155

156156
function /{T, f}(x::FD{T, f}, y::Integer)
157157
powt = coefficient(FD{T,f})
158-
xi, yi = x.i, checked_mul(y, powt)
158+
xi, yi = x.i, widemul(y, powt)
159159
quotient, remainder = divrem(xi, yi)
160-
reinterpret(FD{T, f}, T(widemul(quotient, powt) + round(T, remainder // yi * powt)))
160+
reinterpret(FD{T, f}, T(quotient * powt + round(T, remainder // yi * powt)))
161161
end
162162

163163
# integerification

test/runtests.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -341,12 +341,12 @@ end
341341

342342
@testset "without promotion" begin
343343
@test_throws InexactError FD{Int8,1}(20)
344-
@test 20 / FD{Int8,1}(2) == FD{Int8,1}(10.0)
345-
@test FD{Int8,1}(2) / 20 == FD{Int8,1}(0.1)
344+
@test Int8(20) / FD{Int8,1}(2) == FD{Int8,1}(10.0)
345+
@test FD{Int8,1}(2) / Int8(20) == FD{Int8,1}(0.1)
346346
end
347347

348348
@testset "limits" begin
349-
@test_throws InexactError 1 / FD{Int8,2}(0.4)
349+
@test_throws InexactError Int8(1) / FD{Int8,2}(0.4)
350350
@test_throws InexactError FD{Int8,2}(1) / FD{Int8,2}(0.4)
351351

352352
for T in CONTAINER_TYPES
@@ -365,13 +365,13 @@ end
365365
@eval begin
366366
@test ($max_fd * $scalar) / $scalar == $max_fd
367367
@test ($min_fd * $scalar) / $scalar == $min_fd
368-
@test $max_fd / 2 == reinterpret(FD{$T,$f}, div($max_int, 2))
369-
@test $min_fd / 2 == reinterpret(FD{$T,$f}, div($min_int, 2))
368+
@test $max_fd / $T(2) == reinterpret(FD{$T,$f}, div($max_int, 2))
369+
@test $min_fd / $T(2) == reinterpret(FD{$T,$f}, div($min_int, 2))
370370

371371
# Since the precision of `f` doesn't allow us to make a FixedDecimal >= 1
372372
# there is no way testing this function without raising an exception.
373-
$max_fd != 0 && @test_throws InexactError 2 / $max_fd
374-
$min_fd != 0 && @test_throws InexactError 2 / $min_fd
373+
$max_fd != 0 && @test_throws InexactError $T(2) / $max_fd
374+
$min_fd != 0 && @test_throws InexactError $T(2) / $min_fd
375375
end
376376
end
377377
end

0 commit comments

Comments
 (0)