Try using a double instead of a float. floats are notorious for losing precision due to the way they are stored. doubles can lose precision as well, but are much more precise than floats. If the double isn't as precise as you need you may need to use some sort of fixed point math library.
I think that you'll find that if you try and set f to your value directly, the same thing will happen.
int main(int argc, char** argv)
float f = -6.02059991328;
std::cout << std::setprecision(14) << f << std::endl;