Как можно проверить decimal на +-inf nan

Как можно проверить заданную структуру на +inf, -inf, nan

Я предполагаю, что будет 3 функции isPlusInf, isMinusInf, isNan, которые возвращают статус (int). Но как написать эти функции как это проверить?

gcc version 10.3.0 -Wall -Wextra -Werror -std=c11 Libs v2.33

// bits [0] - содержит младшие разряды
// bits [1] - содержит средние разряды
// bits [2] - содержит большие разряды
// bits [3] - знак (index 31) и степень (index 16-23)
typedef struct {
  unsigned int bits[4];
} decimal;

Ответы (1 шт):

Автор решения: DmitryK

Проверка восьмого бита на установлен:

int  isMinusInf(void) { return bits[3] & (1<<7); } // логическое и с числом 0b10000000

Состояние NaN относится не к числу, а к результату операции.
В принципе можно сделать static переменную-флаг (одну для всех объектов). Но логику работы с ней уже писать вам. Наверное, оптимально будет сделать и флаг и вашу структуру в одном пространстве имен. Что-то типа:

namespace MyFloat
{
   static bool isNan = false;
   typedef struct 
   {
      unsigned char bits[4];
   } decimal;
}

Но можно и в структуре:

typedef struct 
{
  static bool isNan = false;
  unsigned char bits[4];
} decimal;

Либо тогда резервировать ещё один бит для хранения флага NaN

// bits [3] - знак (index 31), флаг NaN (index 30) и степень (index 16-29)
→ Ссылка