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