Как можно проверить 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)