public double deltaT(double JD) {
		double T = (JD - J2000) / JCY;

		double[][] data = { { -25.0, 184.4, 111.6, 31.0, 0.0 },
				{ -17.0, -31527.7, -4773.29, -212.0889, -3.93731 },
				{ -10.0, 6833.0, 1996.25, 186.1189, 3.87068 },
				{ -3.5, -116.0, -88.45, -22.3509, -3.07831 },
				{ -3.0, -4586.4, -4715.24, -1615.08, -184.71 },
				{ -2.0, -427.3, -556.12, -228.71, -30.67 },
				{ -1.5, 150.7, 310.8, 204.8, 41.6 },
				{ -1.0, -150.5, -291.7, -196.9, -47.7 },
				{ -0.7, 486.0, 1896.4, 2606.9, 1204.6 },
				{ +0.2, 65.9, 96.0, 35.0, -20.2 },
				{ +2.0, 63.4, 111.6, 31.0, 0.0 } };

		for (int j = 0; j < data.length; j++) {
			if (T < data[j][0])
				return (data[j][1] + T
						* (data[j][2] + T * (data[j][3] + T * data[j][4]))) / 86400.0;
		}

		return 0.0;
	}