Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern float_class_t classify(double *value_ptr) {
- double_cast cast_ = {.f = *value_ptr};
- uint64_t sign = cast_.parts.sign;
- uint64_t exponent = cast_.parts.exponent;
- uint64_t mantissa = cast_.parts.mantissa;
- if (sign == 0 && exponent == 0 && mantissa == 0) {
- return PlusZero;
- }
- if (sign == 1 && exponent == 0 && mantissa == 0) {
- return MinusZero;
- }
- if (sign == 0 && exponent == 0x7ff && mantissa == 0) {
- return PlusInf;
- }
- if (sign == 1 && exponent == 0x7ff && mantissa == 0) {
- return MinusInf;
- }
- if (sign == 0 && exponent == 0x7ff && (mantissa >> 51) == 0) {
- return SignalingNaN;
- }
- if (sign == 0 && exponent == 0x7ff && (mantissa >> 51) == 1) {
- return QuietNaN;
- }
- if (sign == 0 && exponent == 0) {
- return PlusDenormal;
- }
- if (sign == 1 && exponent == 0) {
- return MinusDenormal;
- }
- if (sign == 0) {
- return PlusRegular;
- }
- if (sign == 1) {
- return MinusRegular;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement