Теоретически у каждого нормального сингла могут быть добавлены экспонента и мантисса, чтобы создать двойное число, а затем убраны отступы, и вы вернетесь к исходному синглу.
Когда вы переходите от теории к реальности, это когда у вас возникают проблемы. Я не знаю, если вы были заинтересованы в теории или реализации. Если это реализация, то вы можете быстро попасть в беду.
IEEE - ужасный формат, насколько я понимаю, он был специально разработан так, чтобы никто не мог его встретить и позволить рынку догнать Intel (это было некоторое время назад), что позволило усилить конкуренцию. Если это правда, то это не удалось, так или иначе мы застряли с этой ужасной спецификацией. Нечто подобное формату TI намного превосходит реальный мир во многих отношениях. У меня нет связи ни с компанией, ни с любым из этих форматов.
Благодаря этой спецификации очень мало, если вообще существует, каких-либо fpus (в аппаратном обеспечении или даже в аппаратном обеспечении плюс операционная система), и таких, которые часто выходят из строя в следующем поколении. (Google: TestFloat). В наши дни проблемы, как правило, заключаются в том, чтобы int плавал и плавал в int, а не в одиночку в удвоение и в удвоение к одиночке, как вы указали выше. Конечно, какую операцию fpu собирается выполнить для этого преобразования? Добавить 0? Умножить на 1? Зависит от fpu и компилятора.
Проблема с IEEE, связанная с вашим вопросом выше, состоит в том, что число может быть представлено несколькими способами, не каждое число, а много чисел может быть представлено. Если бы я хотел сломать ваш код, я бы начал с минус ноля в надежде, что одна из двух операций преобразует его в плюс ноль. Тогда я бы попробовал денормалы. И он должен потерпеть неудачу с сигнальным наном, но вы назвали это известным исключением.
Проблема в том, что знак равенства, вот правило номер один о плавающей запятой, никогда не используйте знак равенства. Равным является сравнение битов, а не сравнение значений, если у вас есть два значения, представленные по-разному (например, плюс ноль и минус ноль), сравнение битов не будет выполнено, даже если оно совпадает. Больше и меньше, чем в fpu, равенство выполняется с целым числом alu.
Я понимаю, что вы, вероятно, использовали уравнение, чтобы объяснить проблему, а не обязательно код, который вы хотели преуспеть или потерпеть неудачу.