#include <stdlib.h>
#include <iostream>
#include <istream> 
#include <fstream> 

using std::cin; 
using std::cout;
using std::endl;
using std::ifstream;
using std::ofstream;
using std::cerr;
using std::ios;

int main(int argc, char* argv[]) 
{
  std::string inFile1, inFile2, outFile;

  if (argc < 4)
    {
      cerr << "Usage: subtractTwoRelative inFile1 inFile2 outFile" << endl;
      cerr << "computes outfile = (inFile1 - inFile2)/inFile2" << endl;
      return 9;
    }
	
  
  inFile1 = argv[1];
  inFile2 = argv[2];
  outFile = argv[3];

  float scale = 1.0;
  if (argc > 4) 
    {
      //cout << argv[3] << endl;
      scale = atoi(argv[3]);
    }


  // cout << "filename1" << endl;
  //cin >> inFile;

  //cout << "outfile" << endl;
  //cin >> outFile;

  
  cout << " infile1 = " << inFile1 << ", infile2 = " <<  inFile2 <<  ", outfile = " << outFile << endl;

  ifstream is1(inFile1.c_str(), ios::in);
  ifstream is2(inFile2.c_str(), ios::in);
  ofstream os(outFile.c_str(), ios::out);

  os.width(18);
  os.precision(10);
  os.setf(ios::showpoint);
  os.setf(ios::scientific);
  /*
  is1.width(18);
  is1.precision(10);
  is1.setf(ios1::showpoint);
  is1.setf(ios::scientific);

  is2.width(18);
  is2.precision(10);
  is2.setf(ios::showpoint);
  is2.setf(ios::scientific);
  */
  if (is1.fail())
    {
      cerr << "Cannot open input file 1";
      return 1;
    }
  
  if (is2.fail())
    {
      cerr << "Cannot open input file 2";
      return 2;
    }

  double time1, time2;
  double time1_old, time2_old;
  double val1, val2;
  
  double difference;
  time1_old = -1000;
  time2_old = -1000;

  is1 >> time1;
  is1 >> val1;

  is2 >> time2;
  is2 >> val2;

  time1_old = time1;
  time2_old = time2;
      
  difference = val1 - val2;

  double timeEps = 1.0;
  double smallNumber = 1.0e-20;
  if (abs(val2) > smallNumber)
    {
      difference /= val2;
    }
  else
    {
      difference /= smallNumber;
    }
  
  if (abs(time1 - time2) >= timeEps)
    {
      cout << "Warning -- time 1 (" << time1 << ") and time2 (" << time2 << ") differ by " << abs(time1 - time2) << endl;
    }
      
  os << time1 << "  " <<  difference << endl;

  

  bool done = false;
  while (is1.good() && is2.good())
    {
      // strip out multiple times
      bool goodNewTime = false;
      while (!goodNewTime && is1.good())
	{
	  while (is1.get() != '\n');
	  is1 >> time1;
	  is1 >> val1;
	  if (time1 > time1_old) goodNewTime = true;
	}


      goodNewTime = false;
      while (!goodNewTime && is2.good())
	{      
	  while (is2.get() != '\n');
	  is2 >> time2;
	  is2 >> val2;
	  if (time2 > time2_old) goodNewTime = true;
	}
      time1_old = time1;
      time2_old = time2;
      
      difference = val1 - val2;

      if (abs(val2) > smallNumber)
        {
          difference /= val2;
        }
      else
        {
          difference /= smallNumber;
        }

      // make it a percentage
      difference *= 100.0;
      
      if (abs(time1 - time2) >= timeEps)
	{
	  cout << "Warning -- time 1 (" << time1 << ") and time2 (" << time2 << ") differ by " << abs(time1 - time2) << endl;
	}
      
      os << time1 << "  " <<  difference << endl;

      
    }

}
