private function initFromScientificNotation($coefficient, $exponent)
    {
        if ($exponent < 0) {
            throw new \InvalidArgumentException(
                sprintf('Invalid value for exponent. Expected a positive integer or 0, but got "%s"', $coefficient)
            );
        }

        if (!preg_match("/^(?<sign>[-+])?(?<integerPart>\d+)$/", $coefficient, $parts)) {
            throw new \InvalidArgumentException(
                sprintf('"%s" cannot be interpreted as a number', $coefficient)
            );
        }

        $this->isNegative = ('-' === $parts['sign']);
        $this->exponent = (int) $exponent;
        // trim leading zeroes
        $this->coefficient = ltrim($parts['integerPart'], '0');

        // when coefficient is '0' or a sequence of '0'
        if ('' === $this->coefficient) {
            $this->exponent = 0;
            $this->coefficient = '0';
            return;
        }

        $this->removeTrailingZeroesIfNeeded();
    }