Если вы внимательно прочитаете спецификации IEEE о числах fp, вы на старте. Следующий шаг - реализовать в программном обеспечении то, что уже сделано аппаратными средствами, если процессор имеет поддержку fp, в противном случае вы должны выполнять операции fp (в соответствии с IEEE) с нуля в программном обеспечении ... Прекрасно выполнимо оба (это было то, что нужно было) делать до того, как IEEE был использован в сопроцессорах cpus или fp, если IEEE 754 - все, что было нужно).
Давайте предположим, что ваша цель не может fp вообще, поэтому вам нужно реализовать это с нуля. Тогда вам решать, как сохранить номер в памяти (вы можете согласиться с порядком номера вашей системы или нет); например float для 1.23 сохраняется в mem как 0xA4709D3F на моей машине (LE), и на самом деле «правильный» путь - 0x3F9D70A4 (наш способ записи больше похож на BE, чем на LE, но «правильного» способа нет ... даже хотя этот способ позволяет нам проверять данные непосредственно с помощью спецификаций, поэтому, если я напишу -1.23, я получу 0xBF9D70A4, где ясно, что бит знака повышен до 1)
Но так как мы собираемся реализовать это с нуля, мы можем записать число в память следующим образом:
unsigned char p[4];
p[0] = 0x3f; p[1] = 0x9d; p[2] = 0x70; p[3] = 0xa4;
а потом наступает сложная часть ... Вот так:
bool is_positive(float_t *p)
{
return ! (p[0] & 0x80); // or alike
}
Мы работаем в памяти, предполагая, что наш proc не способен обрабатывать 32-битные (или более) целые числа. Конечно, я выбрал более простую операцию ...! Остальные сложнее, но, начиная с описания IEEE 754 и рассуждая, вы можете реализовать то, что хотите. Как видите, это не так просто ... Где-то вы могли найти библиотеки, которые реализуют операции с числами fp, когда нет единицы с плавающей запятой, но теперь я не смог найти ни одной (например, Amiga mathieeedoubbas.library , но я думаю, что вы не можете найти источники для этого, и в любом случае это может быть непосредственно в m68k asm ...; просто сказать, что программный импл может где-то существовать ...)