Your function tolerance is smaller than numerical precision by 14-15 orders of magnitude. See eps function in MATLAB for double precision.
How different are the results? You should also work with data that has values on the order of unity so that round off errors are not as significant