Преобразование типов в си?
Отвечая на ваш вопрос об алгоритме: ни по какому. 
У вас здесь происходит каст указателей. 
То есть, в первом случае, у вас есть накоторая ячейка памяти, которая содержит число 37. Если на мгновение забыть о типах, то в этой ячейке лежит значение "...0100101"
Когда вы берете ее адрес (&i) - вы получаете указатель типа int. После каста, вы получаете указатель типа float. Изменяется тип указателя, но не данные на которые он указывает. После разыменования и присваивания вы получаете переменную f, значение которой все еще равно "...0100101". 
Если же вас интересует именно устройство формата float. То, можно начать отсюда:
en.wikipedia.org/wiki/Single-precision_floating-po...
Если sizeof(int) != sizeof(float), можно заработать на свою жопу очень интересный геморрой.
Хуже всего, что такой код реально приходилось встречать в production(!!!) в коммерческих кодеках.