Помните, что то, что вы просите, не является полностью переносимым, что-то вроде этого, вероятно, сработает:
float value = *(float *)&bits;
Другая очевидная возможность - использовать объединение:
typedef union {
unsigned int uint_val;
int int_val;
float float_val;
} values;
values v;
v.uint_val = 0x40040000;
float f = v.float_val;
Любой из них, вероятно, будет работать нормально, но ни один не гарантирует переносимость.