Dual Number Automatic Differentiation