MySQL convierte hexadecimal a doble

¿Qué enfoque se debe tomar en MySQL para convertir de HEX (8 bytes) a un valor doble?

Para convertir de HEX a INT, uso CONV (hex_value, 16,10). Pero para convencer de duplicar, no tengo idea.

CREATE FUNCTION HEX2DOUBLE(hex_input TEXT) RETURNS DOUBLE
DETERMINISTIC
BEGIN
DECLARE hex_bits VARCHAR(64);

DECLARE sign_bit VARCHAR(1);
DECLARE expoent_bits VARCHAR(11);
DECLARE mantissa_bits VARCHAR(52);

DECLARE i INT;
DECLARE mantissa DOUBLE;
DECLARE expoent INT;
DECLARE result DOUBLE;

SET hex_bits = LPAD(CONV(hex_input, 16, 2), 64, '0');

SET sign_bit = SUBSTR(hex_bits, 1, 1);
SET expoent_bits = SUBSTR(hex_bits, 2, 11);
SET mantissa_bits = SUBSTR(hex_bits, 13, 52);

SET expoent = CONV(expoent_bits, 2, 10)-1023;

SET i = 1;

SET mantissa = 0;
WHILE(i <= 52) DO
    IF SUBSTR(mantissa_bits, i , 1 ) = '1' THEN 
        SET mantissa  =  mantissa +  1/POWER(2, i);        
    END IF;
    SET i = i + 1;
END WHILE;

IF(expoent > -1023) THEN
    SET mantissa = mantissa + 1;
END IF;

SET result = POWER(2, expoent) * mantissa;
IF(sign_bit = 1) THEN
    SET result = -1 * result;
END IF;

RETURN result;
END//

Lo anterior parece funcionar la mayor parte del tiempo. ¿Qué podrían decir al respecto? Un problema al que me enfrento es el error SQL (1690): el valor DOBLE está fuera de rango en pow (2, expoent @ 7), que creo que se refiere a la líneaSET result = POWER(2, expoent) * mantissa;

Respuestas a la pregunta(0)

Su respuesta a la pregunta