Skip to content

Commit

Permalink
better fix for domain errors in pow()
Browse files Browse the repository at this point in the history
  • Loading branch information
mlubin committed Jan 9, 2016
1 parent 039431d commit 175094e
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/dual.jl
Original file line number Diff line number Diff line change
Expand Up @@ -226,10 +226,13 @@ abs2dual(z::Dual) = abs2(value(z))

for f in [:^, :(NaNMath.pow)]
@eval function ($f)(z::Dual, w::Dual)
if epsilon(w) == 0.0
return $f(z,value(w))
end
val = $f(value(z),value(w))

du =
epsilon(z)*value(w)*(($f)(value(z),value(w)-1))+epsilon(w)*($f)(value(z),value(w))*NaNMath.log(value(z))
epsilon(z)*value(w)*(($f)(value(z),value(w)-1))+epsilon(w)*($f)(value(z),value(w))*log(value(z))

Dual(val, du)
end
Expand Down
3 changes: 3 additions & 0 deletions test/automatic_differentiation_test.jl
Original file line number Diff line number Diff line change
Expand Up @@ -128,3 +128,6 @@ test(x, y) = x^2 + y

@test value(mod(Dual(15.23, 1), 10)) == 5.23
@test epsilon(mod(Dual(15.23, 1), 10)) == 1

@test epsilon(Dual(-2.0,1.0)^2.0) == -4
@test epsilon(Dual(-2.0,1.0)^Dual(2.0,0.0)) == -4

0 comments on commit 175094e

Please sign in to comment.