Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdint.h>
- #include <string.h>
- enum
- {
- FIRST_SHIFT = 31,
- F_SEC_SHIFT = 1,
- S_SEC_SHIFT = 24,
- THIRD_SHIFT = 9,
- EXP_CONST = 255
- };
- FPClass fpclassf(float value, int *psign) {
- uint32_t new_val;
- memcpy(&new_val, &value, sizeof(value));
- uint32_t sign = new_val >> FIRST_SHIFT;
- uint32_t exp = (new_val << F_SEC_SHIFT) >> S_SEC_SHIFT;
- uint32_t mant = (new_val << THIRD_SHIFT) >> THIRD_SHIFT;
- printf("SIGN %u\n", sign);
- printf("EXP %u\n", exp);
- printf("MANT %u\n", mant);
- if (exp == 0 && mant == 0) {
- *psign = sign;
- return FFP_ZERO;
- } else if (mant != 0 && exp == 0) {
- *psign = sign;
- return FFP_DENORMALIZED;
- } else if (mant != 0 && exp != 0) {
- *psign = sign;
- return FFP_NORMALIZED;
- } else if (mant == 0 && exp == EXP_CONST) {
- *psign = sign;
- return FFP_INF;
- } else {
- *psign = 0;
- return FFP_NAN;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment