Почти все системы сегодня используют IEEE с одинарной или двойной точностью с плавающей запятой.Таким образом, в этом случае вы можете (поразрядно) преобразовать его в целое число и прочитать бит знака.
Вот один из подходов, который использует объединения.Хотя он не полностью соответствует стандартам, он все равно должен работать практически на всех системах.
union{
double f;
uint64_t i;
} x;
x.f = ... // Your floating-point value (can be NaN)
// Check the sign bit.
if ((x.i & 0x8000000000000000ull) == 0){
// positive
}else{
// negative
}