Skip to content

Commit 123cc19

Browse files
tkfjrevels
authored andcommitted
Special case x^0 (#331)
fixes #330
1 parent 2d09793 commit 123cc19

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/dual.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,8 +408,12 @@ for f in (:(Base.:^), :(NaNMath.pow))
408408
begin
409409
v = value(x)
410410
expv = ($f)(v, y)
411-
deriv = y * ($f)(v, y - 1)
412-
return Dual{Tx}(expv, deriv * partials(x))
411+
if y == zero(y)
412+
new_partials = zero(partials(x))
413+
else
414+
new_partials = partials(x) * y * ($f)(v, y - 1)
415+
end
416+
return Dual{Tx}(expv, new_partials)
413417
end,
414418
begin
415419
v = value(y)

test/DualTest.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,4 +455,14 @@ for N in (0,3), M in (0,4), V in (Int, Float32)
455455
end
456456
end
457457

458+
@testset "Exponentiation of zero" begin
459+
x0 = 0.0
460+
x1 = Dual{:t1}(x0, 1.0)
461+
x2 = Dual{:t2}(x1, 1.0)
462+
x3 = Dual{:t3}(x2, 1.0)
463+
@test x3^2 === x3 * x3
464+
@test x2^1 === x2
465+
@test x1^0 === Dual{:t1}(1.0, 0.0)
466+
end
467+
458468
end # module

0 commit comments

Comments
 (0)