This version does everything in double prec but accepts a preconditioner working in single precision.