reuse expm1 result for differential We can reuse the expm1 result to compute the differential and eliminate the extra exp call. Change-Id: Ibd4f0564ab6da99fc23fbf6462408cfc3408fda1
diff --git a/include/ceres/jet.h b/include/ceres/jet.h index 4f3b144..62e9828 100644 --- a/include/ceres/jet.h +++ b/include/ceres/jet.h
@@ -490,7 +490,9 @@ // expm1(a + h) ~= expm1(a) + exp(a) h template <typename T, int N> inline Jet<T, N> expm1(const Jet<T, N>& f) { - return Jet<T, N>(expm1(f.a), exp(f.a) * f.v); + const T tmp = expm1(f.a); + const T expa = tmp + T(1.0); // exp(a) = expm1(a) + 1 + return Jet<T, N>(tmp, expa * f.v); } // sqrt(a + h) ~= sqrt(a) + h / (2 sqrt(a))