data; Assertion::string($data, 'Invalid data'); $half = gmp_intval(gmp_init(bin2hex($data), 16)); $exp = ($half >> 10) & 0x1f; $mant = $half & 0x3ff; if (0 === $exp) { $val = $mant * 2 ** (-24); } elseif (0b11111 !== $exp) { $val = ($mant + (1 << 10)) * 2 ** ($exp - 25); } else { $val = 0 === $mant ? INF : NAN; } return 1 === ($half >> 15) ? -$val : $val; } public function getExponent(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); $half = gmp_intval(gmp_init(bin2hex($data), 16)); return ($half >> 10) & 0x1f; } public function getMantissa(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); $half = gmp_intval(gmp_init(bin2hex($data), 16)); return $half & 0x3ff; } public function getSign(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); $half = gmp_intval(gmp_init(bin2hex($data), 16)); return 1 === ($half >> 15) ? -1 : 1; } }