getExponent(); $mant = $this->getMantissa(); $sign = $this->getSign(); if (0 === $exp) { $val = $mant * 2 ** (-(126 + 23)); } elseif (0b11111111 !== $exp) { $val = ($mant + (1 << 23)) * 2 ** ($exp - (127 + 23)); } else { $val = 0 === $mant ? INF : NAN; } return $sign * $val; } public function getExponent(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); return Utils::binToBigInteger($data)->shiftedRight(23)->and(Utils::hexToBigInteger('ff'))->toInt(); } public function getMantissa(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); return Utils::binToBigInteger($data)->and(Utils::hexToBigInteger('7fffff'))->toInt(); } public function getSign(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); $sign = Utils::binToBigInteger($data)->shiftedRight(32); return $sign->isEqualTo(BigInteger::one()) ? -1 : 1; } }