namespace factor {

// Some functions for converting floating point numbers to binary
// representations and vice versa

union double_bits_pun {
  double x;
  uint64_t y;
};

inline static uint64_t double_bits(double x) {
  double_bits_pun b;
  b.x = x;
  return b.y;
}

inline static double bits_double(uint64_t y) {
  double_bits_pun b;
  b.y = y;
  return b.x;
}

union float_bits_pun {
  float x;
  uint32_t y;
};

inline static uint32_t float_bits(float x) {
  float_bits_pun b;
  b.x = x;
  return b.y;
}

inline static float bits_float(uint32_t y) {
  float_bits_pun b;
  b.y = y;
  return b.x;
}

}