Skip to content

Commit fa19c5a

Browse files
twadleighjrevels
authored andcommitted
Add rules for atan2, hypot, mod, and rem. Addresses #15. (#16)
1 parent 0b3c10b commit fa19c5a

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

src/rules.jl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,10 @@ hasdiffrule(f::Symbol, arity::Int) = in((f, arity), DEFINED_DIFFRULES)
161161
@define_diffrule /(x, y) = :(inv($y)), :(-$x / ($y^2))
162162
@define_diffrule ^(x, y) = :($y * ($x^($y - 1))), :(($x^$y) * log($x))
163163

164-
# TODO:
165-
#
166-
# mod
167-
# hypot
168-
# atan2
164+
@define_diffrule atan2(x, y) = :($y / ($x^2 + $y^2)), :(-$x / ($x^2 + $y^2))
165+
@define_diffrule hypot(x, y) = :($x / hypot($x, $y)), :($y / hypot($x, $y))
166+
@define_diffrule mod(x, y) = :(first(promote(ifelse(isinteger($x / $y), NaN, 1), NaN))), :(z = $x / $y; first(promote(ifelse(isinteger(z), NaN, -floor(z)), NaN)))
167+
@define_diffrule rem(x, y) = :(first(promote(ifelse(isinteger($x / $y), NaN, 1), NaN))), :(z = $x / $y; first(promote(ifelse(isinteger(z), NaN, -trunc(z)), NaN)))
169168

170169
####################
171170
# SpecialFunctions #

0 commit comments

Comments
 (0)