You can play with the input value of k, and see that the error changes, but both value remain relatively close.
The error is relatively large. But I don’t think you can get anything better with AD.
If you are not convinced. One way to check would be to split your function that evaluates g0 in smaller pieces. And gradcheck each piece. These smaller pieces should all have smaller numerical errors and pass the test.