data; Assertion::string($data, 'Invalid data'); $single = gmp_intval(gmp_init(bin2hex($data), 16)); $exp = ($single >> 23) & 0xff; $mant = $single & 0x7fffff; 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 1 === ($single >> 31) ? -$val : $val; } public function getExponent(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); $single = gmp_intval(gmp_init(bin2hex($data), 16)); return ($single >> 23) & 0xff; } public function getMantissa(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); $single = gmp_intval(gmp_init(bin2hex($data), 16)); return $single & 0x7fffff; } public function getSign(): int { $data = $this->data; Assertion::string($data, 'Invalid data'); $single = gmp_intval(gmp_init(bin2hex($data), 16)); return 1 === ($single >> 31) ? -1 : 1; } }