private double rowAdd(Double[][] mat, int rowTo, int rowFrom, double scaleFactor)
	{
		List<Future> futures = new ArrayList<Future>(col);
		if (rowTo == rowFrom)
			return rowScale(mat[rowTo], scaleFactor + 1) + 0.0;
		for (int i = 0; i < mat[0].length; i++)
		{
			//			mat[rowTo][i] = mat[rowTo][i] + mat[rowFrom][i] * scaleFactor + 0.0;
			futures.add(threadPool.submit(new AddThread(mat, rowTo, rowFrom, i, scaleFactor)));
		}
		try {
			for (Future f : futures)
				f.get();
		} catch (InterruptedException e) {
			System.err.println("Error: Interrupted Exception");
		} catch (ExecutionException e) {
			System.err.println("Error: Execution Exception");
		}
		return 1.0;
	}