mirror of
https://github.com/encounter/osdev.git
synced 2026-03-30 11:33:54 -07:00
55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
#pragma once
|
|
|
|
#define MAX(a, b) \
|
|
({ __typeof__ (a) _a = (a); \
|
|
__typeof__ (b) _b = (b); \
|
|
_a > _b ? _a : _b; })
|
|
|
|
#define MIN(a, b) \
|
|
({ __typeof__ (a) _a = (a); \
|
|
__typeof__ (b) _b = (b); \
|
|
_a < _b ? _a : _b; })
|
|
|
|
#define FP_NAN 0
|
|
#define FP_INFINITE 1
|
|
#define FP_ZERO 2
|
|
#define FP_SUBNORMAL 3
|
|
#define FP_NORMAL 4
|
|
|
|
int __fpclassify(double);
|
|
int __fpclassifyf(float);
|
|
int __fpclassifyl(long double);
|
|
|
|
static inline unsigned __FLOAT_BITS(float __f) {
|
|
union {
|
|
float __f;
|
|
unsigned __i;
|
|
} __u;
|
|
__u.__f = __f;
|
|
return __u.__i;
|
|
}
|
|
|
|
static inline unsigned long long __DOUBLE_BITS(double __f) {
|
|
union {
|
|
double __f;
|
|
unsigned long long __i;
|
|
} __u;
|
|
__u.__f = __f;
|
|
return __u.__i;
|
|
}
|
|
|
|
#define isfinite(x) ( \
|
|
sizeof(x) == sizeof(float) ? (__FLOAT_BITS(x) & 0x7fffffff) < 0x7f800000 : \
|
|
sizeof(x) == sizeof(double) ? (__DOUBLE_BITS(x) & -1ULL>>1) < 0x7ffULL<<52 : \
|
|
__fpclassifyl(x) > FP_INFINITE)
|
|
|
|
int __signbit(double);
|
|
int __signbitf(float);
|
|
int __signbitl(long double);
|
|
|
|
#define signbit(x) ( \
|
|
sizeof(x) == sizeof(float) ? (int)(__FLOAT_BITS(x)>>31) : \
|
|
sizeof(x) == sizeof(double) ? (int)(__DOUBLE_BITS(x)>>63) : \
|
|
__signbitl(x) )
|
|
|
|
long double frexpl(long double x, int *e); |