Por que printf ("% f", 0); dar comportamento indefinido?

A declaração

printf("%f\n",0.0f);

imprime 0.

No entanto, a declaração

printf("%f\n",0);

imprime valores aleatórios.

Percebo que estou exibindo algum tipo de comportamento indefinido, mas não consigo descobrir o porquê especificamente.

Um valor de ponto flutuante no qual todos os bits são 0 ainda é válidofloat com o valor 0.
float eint são do mesmo tamanho na minha máquina (se isso for relevante).

Por que usar um literal inteiro em vez de um literal de ponto flutuante emprintf causar esse comportamento?

P.S. o mesmo comportamento pode ser visto se eu usar

int i = 0;
printf("%f\n", i);

questionAnswers(10)

yourAnswerToTheQuestion