#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "bnc.h"

#define DIM 512

void get_dproblem(DMatrix a, DVector b, DVector ans, long dim)
{
	long int i, j, k;
	double tmp;

	/* Frank Matrix */
	for(i = 0; i < dim; i++)
	{
		for(j = 0; j < dim; j++)
		{
			if(i < j)
				set_dmatrix_ij(a, i, j, (double)(dim - j));
			else
				set_dmatrix_ij(a, i, j, (double)(dim - i));
		}
	}

	/* Answer */
	for(i = 0; i < dim; i++)
		set_dvector_i(ans, i, (double)i);

	/* Make constant vector */
	mul_dmatrix_dvec(b, a, ans);
}

int main(int argc, char *argv[])
{
	DMatrix da;
	DVector db, dx, dans;
	double start, dtime;

	long int itimes_d;

	/* initialize */
	da = init_dmatrix(DIM, DIM);
	db = init_dvector(DIM);
	dx = init_dvector(DIM);
	dans = init_dvector(DIM);

	/* get problem */
	get_dproblem(da, db, dans, DIM);

	/* run DCG */
	start = get_secv();
	itimes_d = DCG(dx, da, db, 1.0e-13, 1.0e-99, DIM * 5);
	dtime = get_secv() - start;

	print_dvector(dx);

	/* end */
	free_dmatrix(da);
	free_dvector(db);
	free_dvector(dx);
	free_dvector(dans);

	/* print itimes */
	printf("double         : %ld(%f)\n", itimes_d, dtime);
}

