Skip to content

Commit

Permalink
Merge pull request #34 from JuliaDiff/domainpow
Browse files Browse the repository at this point in the history
better fix for domain errors in pow()
  • Loading branch information
mlubin committed Jan 10, 2016
2 parents 39eb900 + 175094e commit 34ae2b2
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 @@ -231,10 +231,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 @@ -134,3 +134,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 34ae2b2

Please sign in to comment.