public function computeWithoutBcMath(DecimalNumber $a, DecimalNumber $b)
    {
        $aAsString = (string) $a;
        $bAsString = (string) $b;

        // optimization: if either one is zero, the result is zero
        if ('0' === $aAsString || '0' === $bAsString) {
            return new DecimalNumber('0');
        }

        // optimization: if either one is one, the result is the other one
        if ('1' === $aAsString) {
            return $b;
        }
        if ('1' === $bAsString) {
            return $a;
        }

        $result = $this->multiplyStrings(
            ltrim($a->getCoefficient(), '0'),
            ltrim($b->getCoefficient(), '0')
        );

        $sign = ($a->isNegative() xor $b->isNegative()) ? '-' : '';

        // a multiplication has at most as many decimal figures as the sum
        // of the number of decimal figures the factors have
        $exponent = $a->getExponent() + $b->getExponent();

        return new DecimalNumber($sign . $result, $exponent);
    }