public function div(Decimal $b, $scale = null)
{
self::paramsValidation($b, $scale);
if ($b->isZero()) {
throw new \DomainException("Division by zero is not allowed.");
} elseif ($this->isZero() || $b->isInfinite()) {
return DecimalConstants::Zero();
} else {
if ($scale !== null) {
$divscale = $scale;
} else {
// $divscale is calculated in order to maintain a reasonable precision
$this_abs = $this->abs();
$b_abs = $b->abs();
$log10_result = self::innerLog10($this_abs->value, $this_abs->scale, 1) - self::innerLog10($b_abs->value, $b_abs->scale, 1);
$divscale = (int) max($this->scale + $b->scale, max(self::countSignificativeDigits($this, $this_abs), self::countSignificativeDigits($b, $b_abs)) - max(ceil($log10_result), 0), ceil(-$log10_result) + 1);
}
return self::fromString(bcdiv($this->value, $b->value, $divscale + 1), $divscale);
}
}