Debes de estar consiente que cada tipo de dato un valor fijo, por ejemplo:
char -> 8 bits; rango de valores -127 a 128
Es normal que al insertar valores que no caben en un float o en double o en un long long. El programa de un valor que no fue el insertado.
Para evitar esto necesitar manejar otras librerias que te permitan una precision arbitraria (o sea que el unico limite para representar un numero es la cantidad de memoria de la maquina).
Precisión arbitraria