I don't understand the need for this PR at all: the existing function already used the tolerance passed in, and allowed it to be specified as a percentage.  Why will tolerance be zero?  Shouldn't we educate the users of this code to pass in a percentage instead?  Or if the problem is complex numbers, why is tolerance being used at all?