Если ваш код сложения правильный, а вычитание - нет, проблема, вероятно, заключается в дополнении и сложении двух.
Нужно ли дополнять и дополнять два, а не вычитать?
Если это не проблема, у меня проблемы с вашим алгоритмом. Я давно не делал ничего подобного. Не могли бы вы предоставить некоторые детали? Более конкретно, что такое скрытый бит?
Мне кажется, что обработка скрытого бита подходит для сложения, но не для вычитания. Может быть, вы должны установить его в мантиссе f1, а не в f2? Или отрицать мантиссу f1 вместо f2?
Не зная, что вы получаете по сравнению с тем, что вы ожидаете, и больше подробностей о алгоритме, который вы используете, это лучшее, что я могу сделать.
Редактировать: ОК, я посмотрел ссылки в вашем комментарии. Одна вещь, которую вы не можете сделать в предоставленном коде - это нормализация. При добавлении либо скрытые биты переполняются (смещение мантиссы влево, приращение показателя степени), либо нет. При вычитании произвольные части мантиссы могут быть равны нулю. В десятичном числе рассмотрите добавление 0.5E1 и 0.50001E1; вы получите 1.00001E1, и если вы нормализуетесь, вы получите 0.10001E2. Вычитая 0,5E1 из 0,50001E1, вы получаете 0,00001E1. Затем вам нужно сместить мантиссу влево и уменьшить показатель степени на столько, сколько потребуется, чтобы получить 0.1E-4.