
unsigned int f_2uint_int1(float float_number) {             // split the float and return first unsigned integer

  union f_2uint {
    float f;
    uint16_t i[2];
  };

  union f_2uint f_number;
  f_number.f = float_number;

  return f_number.i[0];
}

unsigned int f_2uint_int2(float float_number) {            // split the float and return first unsigned integer

  union f_2uint {
    float f;
    uint16_t i[2];
  };

  union f_2uint f_number;
  f_number.f = float_number;

  return f_number.i[1];
}

float f_2uint_float(unsigned int uint1, unsigned int uint2) {    // reconstruct the float from 2 unsigned integers

  union f_2uint {
    float f;
    uint16_t i[2];
  };

  union f_2uint f_number;
  f_number.i[0] = uint1;
  f_number.i[1] = uint2;

  return f_number.f;

}



unsigned int l_2uint_int1(long long_number) {             // split the long and return first unsigned integer

  union l_2uint {
    long l;
    uint16_t i[2];
  };

  union l_2uint l_number;
  l_number.l = long_number;

  return l_number.i[0];
}

unsigned int l_2uint_int2(long long_number) {            // split the long and return first unsigned integer

  union l_2uint {
    long l;
    uint16_t i[2];
  };

  union l_2uint l_number;
  l_number.l = long_number;

  return l_number.i[1];
}

long l_2uint_long(unsigned int uint1, unsigned int uint2) {    // reconstruct the long from 2 unsigned integers

  union l_2uint {
    long l;
    uint16_t i[2];
  };

  union l_2uint l_number;
  l_number.i[0] = uint1;
  l_number.i[1] = uint2;

  return l_number.l;

}
