private double localIEEEremainder(double f1, double f2) {
		// return Math.IEEEremainder(f1, f2);
		if (Double.isNaN(f1) || Double.isNaN(f2) || Double.isInfinite(f1)
				|| f2 == 0) {
			return Double.NaN;
		}

		if (Double.isInfinite(f1) == false && Double.isInfinite(f1) == true) {
			return f1;
		}

		double d = 2 * f1 / f2;
		long n;
		if (Math.floor(d) == d) {
			if (Math.floor(d / 2) % 2 == 0) {
				n = (long) Math.floor(d / 2);
			} else {
				n = (long) Math.ceil(d / 2);
			}
		} else {
			n = Math.round(d / 2);
		}

		return f1 - (f2 * n);
	}