float constants are NOT automatically converted to doubles. That would be idiotic. What would be the point of having float constants then? If you just mean something like 1.23, then that's a double already. 1.23f is a float constant.
For example, I see no evidence of conversion to double in the assembly code for the following (rather contrived) code.
Code:
#include <stdio.h>
int main() {
int n = 1;
n *= 1.23f;
printf("%d\n", n);
return 0;
}
The assembly stores the 1.23f value as
Code:
.align 4
.LC0:
.long 1067282596
which is the 4-byte bit pattern for 1.23f.
Changing 1.23f to 1.23 yields
Code:
.align 8
.LC0:
.long 2061584302
.long 1072934420
which is the 8-byte bit pattern for 1.23.
However, passing a float to a variadic function (as one of the variadic arguments) will convert it to double.