getExponent(); $mantissa = $this->getMantissa(); $sign = $this->getSign(); if ($exponent === 0) { $val = $mantissa * 2 ** (-(1022 + 52)); } elseif ($exponent !== 0b11111111111) { $val = ($mantissa + (1 << 52)) * 2 ** ($exponent - (1023 + 52)); } else { $val = $mantissa === 0 ? INF : NAN; } return $sign * $val; } public function getExponent(): int { $data = $this->data; Utils::assertString($data, 'Invalid data'); return Utils::binToBigInteger($data)->shiftedRight(52)->and(Utils::hexToBigInteger('7ff'))->toInt(); } public function getMantissa(): int { $data = $this->data; Utils::assertString($data, 'Invalid data'); return Utils::binToBigInteger($data)->and(Utils::hexToBigInteger('fffffffffffff'))->toInt(); } public function getSign(): int { $data = $this->data; Utils::assertString($data, 'Invalid data'); $sign = Utils::binToBigInteger($data)->shiftedRight(63); return $sign->isEqualTo(BigInteger::one()) ? -1 : 1; } }