Among others:
- The savings are hardly ever worth it (number-crunching is not typical).
- Rounding errors accumulate, so better go to higher precision than needed from the start (experts may know it is precise enough anyway, and there are calculations which can be done exactly).
- Common floating operations using the fpu internally often work on double or higher precision anyway.
- C and C++ can implicitly convert from float to double, the other way needs an explicit cast.
- Variadic and no-prototype functions always get double, not float. (second one is only in ancient C and actively discouraged)
- You may commonly do an operation with more than needed precision, but seldom with less, so libraries generally favor higher precision too.
But in the end, YMMV: Measure, test, and decide for yourself and your specific situation.
BTW: There's even more for performance fanatics: Use the IEEE half precision type. Little hardware or compiler support for it exists, but it cuts your bandwidth requirements in half yet again.