Estoy tratando de hacer un programa que me resuelva ecuaciones cuadraticas de la forma a(x*x)+bx+c=0; tengo lo siguiente:
#include <stdio.h>  //printf(); scanf();
#include <conio.h>  //clrscr(); gotoxy(); cprintf(); getch();
#include <math.h> //abs(); sqrt();
void main(void)
{
   //declaracion de variables
   int d=1; //signo de b
   float a,b,c; //datos de la ecuacion: a(x*x)-bx+c=0
   float band=0; //bandera (si el resultado de la raiz es negativo)
   float res_raiz; //resultado de la raiz
   float x1,x2,x3,x4; //incognitas a encontrar
   float raiz_cuad; //(b*b)-4ac
   clrscr();
   gotoxy(10,2);printf("introduzca el valor de a: ");
   scanf("%f",&a);
   gotoxy(10,3);printf("introduzca el valor de b: ");
   scanf("%f",&b);
   gotoxy(10,4);printf("introduzca el valor de c: ");
   scanf("%f",&c);
   if (b<0) //si b<0...
   {
      d=-1; //...entonces en el signo de b es negativo
   }
   raiz_cuad=(b*b)-(4*(a*c));
   if (raiz_cuad<0) //si el resultado de (b*b)-4ac es < 0...
   {
      raiz_cuad=abs(raiz_cuad); //valor absoluto de (b*b)-4ac
      band=1; //...entonces bandera = 1 "(b*b)-4ac es negativo"
   }
   res_raiz=sqrt(raiz_cuad);
   x1=((-b)+res_raiz)/(2*a);
   x2=((-b)-res_raiz)/(2*a);
   x3=d*(-1*((abs(b)+(res_raiz))/(2*a)));
   x4=c/(a*x3);
   gotoxy(10,10);printf("el resultado de x1 es:%.4f",x1);
   gotoxy(10,12);printf("el resultado de x2 es:%.4f",x2);
   gotoxy(10,16);printf("el resultado de x3 es:%.4f",x3);
   gotoxy(10,18);printf("el resultado de x4 es:%.4f",x4);
   if (band==1) //si bandera = 1
   {
      gotoxy(10,14);printf("el resultado de la raiz es negativo");
   }
   getch();
}
A este programa, si le meto valores muy grandes o muy pequeños, por ejemplo: 1e130 (uno por 10 a la 130) me saca del programa sin imprimir algo en pantalla. ¿como le hago para el programa me reconozca este tipo de cantidades (1e130)?