#include <iostream>
#include <fstream>

union dbl {
  char mem[8];
  double d;
};

int main()
{
  double d[] = {1.0, 2.1, 3.2, 4.3};
  
  std::ofstream fout("dataset.dat", std::ios::binary);
  for (double* dp = d; dp != &d[sizeof(d) / sizeof(d[0])]; dp++)
    fout.write(reinterpret_cast<char*>(dp), static_cast<std::streamsize>(sizeof(double)));
  fout.close();
  
  std::ifstream fin("dataset.dat", std::ios::binary);
  std::istreambuf_iterator<char> buf(fin), eof;
  
  for (; buf != eof;) {
    dbl c;
    c.mem[0] = *buf++;
    c.mem[1] = *buf++;
    c.mem[2] = *buf++;
    c.mem[3] = *buf++;
    c.mem[4] = *buf++;
    c.mem[5] = *buf++;
    c.mem[6] = *buf++;
    c.mem[7] = *buf++;
    std::cout << c.d << std::endl;
  }
}
