private static DecimalImpl divByInt(final long d1Base, final int d1Factor, final long d2Base)
  {
	if (d1Factor < 0)
	{
	  final long scaledBase = d1Base * DPU.getScale(-d1Factor);
	  final long base = scaledBase / d2Base;
	  final long remainder = scaledBase % d2Base;
	  if (0 != remainder)
	  {
		final int factorLimit = DPU.findFactorByLimit(base);
		if (factorLimit > 0)
		{
		  final int factor = factorLimit + d1Factor;
		  final long scaledRemainder = remainder * DPU.getScale(factor);
		  final long remainderBase;
		  if (DPU.isSameMulSign(remainder, DPU.getScale(factor), scaledRemainder))
		  {
			remainderBase = scaledRemainder / d2Base;
		  }
		  else
		  {
			remainderBase = remainder / (d2Base / DPU.getScale(factor));
		  }
		  return safegetInstance(base * DPU.getScale(factor) + remainderBase, factor);
		}
	  }
	  return getInstance(base, 0);
	}
	else
	{
	  final long base = d1Base / d2Base;
	  final long remainder = d1Base % d2Base;
	  if (0 != remainder)
	  {
		final int factorLimit = DPU.findFactorByLimit(Math.abs(base));
		final int factorDiff = factorLimit - d1Factor;
		if (factorDiff > 0)
		{
		  final long remainderBase = remainder * DPU.getScale(factorDiff) / d2Base;
		  return safegetInstance(base * DPU.getScale(factorDiff) + remainderBase, factorLimit);
		}
	  }
	  return getInstance(base, d1Factor);
	}
  }