A resposta do ixjf é a correcta. (já agora sempre usei o termo atirar (como em atirar ao ar) - e apanhar, nas minhas aulas, dando simultâneamente a "tradução" para inglês).
No entanto nem procedendo assim se tem a garantia de estar a fazer a coisa bem, porque, por exemplo, a conversão da string "1.23456789012345678901234567890123456789012345679012345678901234567890" - sem espaços pelo meio - para float é válida e até está dentro do alcance (range), portanto não há erro, nenhuma excepção é atirada (throw), mas a conversão, ao ser feito, introduz silenciosamente um erro de arredondamento (round, aka round-up), o que pode ser relevante ou não. Tem de se estar preparado para estas questões.
O problema do programa do sir_atmc é que na verdade não é fácil saber o que se pode considerar, por exemplo, um int. Isso depende do compilador e/ou da máquina, se bem que recentemente a coisa seja razoavelmente estável.
Dito isto, se for um trabalho para um cadeira, provavelmente o processo sir_atmc é o indicado :-).
Raciocínio: Por exemplo 2 000 000 000 (base 10) é um int? (nuns casos sim, noutros não). É um float válido? provavelmente sim, mas não pode exactamente representado nessa forma.