C printf usando% d y% f

Estaba trabajando en este programa y noté que usar% f para un doble y% d para un flotador me da algo completamente diferente. ¿Alguien sabe por qué sucede esto?

int main ()
{
 float a = 1F;
 double b = 1;

 printf("float =%d\ndouble= %f", a, b);
}

Esta es la salida

float = -1610612736
double = 190359837192766135921612671364749893774625551025007120912096639276776057269784974988808792093423962875123204096.0000