Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. extern float_class_t classify(double *value_ptr) {
  2. double_cast cast_ = {.f = *value_ptr};
  3. uint64_t sign = cast_.parts.sign;
  4. uint64_t exponent = cast_.parts.exponent;
  5. uint64_t mantissa = cast_.parts.mantissa;
  6.  
  7. if (sign == 0 && exponent == 0 && mantissa == 0) {
  8. return PlusZero;
  9. }
  10.  
  11. if (sign == 1 && exponent == 0 && mantissa == 0) {
  12. return MinusZero;
  13. }
  14.  
  15. if (sign == 0 && exponent == 0x7ff && mantissa == 0) {
  16. return PlusInf;
  17. }
  18.  
  19. if (sign == 1 && exponent == 0x7ff && mantissa == 0) {
  20. return MinusInf;
  21. }
  22.  
  23. if (sign == 0 && exponent == 0x7ff && (mantissa >> 51) == 0) {
  24. return SignalingNaN;
  25. }
  26.  
  27. if (sign == 0 && exponent == 0x7ff && (mantissa >> 51) == 1) {
  28. return QuietNaN;
  29. }
  30.  
  31. if (sign == 0 && exponent == 0) {
  32. return PlusDenormal;
  33. }
  34.  
  35. if (sign == 1 && exponent == 0) {
  36. return MinusDenormal;
  37. }
  38.  
  39. if (sign == 0) {
  40. return PlusRegular;
  41. }
  42.  
  43. if (sign == 1) {
  44. return MinusRegular;
  45. }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement