From d5798203b7d316389e1c0fc7cd4cd34e2cd1765d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5BA=1B=5BA=1B=5BA=1B=5BB=1B=5BB=1B=5BBwilltebbutt?= Date: Sat, 3 Mar 2018 12:44:36 +0000 Subject: [PATCH 1/2] Add max, min, and abs. --- src/rules.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/rules.jl b/src/rules.jl index 27c2f7e..296e232 100644 --- a/src/rules.jl +++ b/src/rules.jl @@ -60,6 +60,7 @@ @define_diffrule Base.lgamma(x) = :( digamma($x) ) @define_diffrule Base.Math.JuliaLibm.log1p(x) = :( inv($x + 1) ) @define_diffrule Base.transpose(x) = :( 1 ) +@define_diffrule Base.abs(x) = :( $x > 0 ? one($x) : -one($x) ) # binary # #--------# @@ -76,6 +77,8 @@ @define_diffrule Base.mod(x, y) = :( first(promote(ifelse(isinteger($x / $y), NaN, 1), NaN)) ), :( z = $x / $y; first(promote(ifelse(isinteger(z), NaN, -floor(z)), NaN)) ) @define_diffrule Base.rem(x, y) = :( first(promote(ifelse(isinteger($x / $y), NaN, 1), NaN)) ), :( z = $x / $y; first(promote(ifelse(isinteger(z), NaN, -trunc(z)), NaN)) ) @define_diffrule Base.rem2pi(x, r) = :( 1 ), :NaN +@define_diffrule Base.max(x, y) = :( $x > $y ? one($x) : zero($x) ), :( $x > $y ? zero($y) : one($y) ) +@define_diffrule Base.min(x, y) = :( $x > $y ? zero($x) : one($x) ), :( $x > $y ? one($y) : zero($y) ) #################### # SpecialFunctions # From f80f8ce9c51a0a3ef912e11518e3741e60fd8d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5BA=1B=5BA=1B=5BA=1B=5BB=1B=5BB=1B=5BBwilltebbutt?= Date: Sun, 4 Mar 2018 18:47:22 +0000 Subject: [PATCH 2/2] Change abs implementation to use signbit. --- src/rules.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rules.jl b/src/rules.jl index 296e232..9d7bfba 100644 --- a/src/rules.jl +++ b/src/rules.jl @@ -60,7 +60,7 @@ @define_diffrule Base.lgamma(x) = :( digamma($x) ) @define_diffrule Base.Math.JuliaLibm.log1p(x) = :( inv($x + 1) ) @define_diffrule Base.transpose(x) = :( 1 ) -@define_diffrule Base.abs(x) = :( $x > 0 ? one($x) : -one($x) ) +@define_diffrule Base.abs(x) = :( signbit($x) ? -one($x) : one($x) ) # binary # #--------#