Was passiert ist folgendes:
Die beiden Funktionen sind nicht deklariert.
Erst nimmt der Compiler beim Aufruf an, daß jeweils
double übergeben wird (bei add_double weil du es so hinschreibst,
und bei add_float, weil du zwar float hinschreibst, die aber
beim Aufruf von Funktionen defaultmäßig als double übergeben
werden).
Also werden double übergeben, auch bei add_float.
Die Funktion selbst erwartet aber nur float.
Wenn der Compiler das merkt, ist es aber zu spät - der
Aufruf ist schon kompiliert.
=> Deklarieren hilft, und die Warnungen des Compilers
sind immer eine Überlegung wert.