Ce n'est pas tant la précision du type float en soi qui pose problème, mais la façon dont sont codées les fonctions de base sur ce type. Les erreurs se propagent rapidement et deviennent assez vite non négligeables, ce qui peut causer pas mal de bugs, même pour des choses assez simples.
Je ne connais pas en détails les problèmes du type float, mais j'ai toujours entendu les gens qui font des preuves de programme ou de l'analyse statique sur du langage C dire que le type float était très mauvais et à éviter à tout prix.
J'ai pu le vérifier récemment en bossant sur un projet, quelqu'un avait codé une égalité à epsilon près en utilisant des types float, et même en mettant un écart très raisonnable, ça finissait par bugguer assez vite. En remplaçant tous les float par des double, on a plus jamais eu aucun problème.