MySQL конвертировать гекс в двойной

Какой подход следует использовать в MySQL для преобразования из HEX (8 байт) в двойное значение?

Для преобразования из HEX в INT я использую CONV (hex_value, 16,10). Но для того, чтобы преобразовать в двойной, я понятия не имею.

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//

Выше, кажется, работает большую часть времени. Что вы, ребята, могли бы сказать по этому поводу? Одна проблема, с которой я сталкиваюсь, это ошибка SQL (1690): значение DOUBLE вне диапазона в pow (2, expoent @ 7), которое, я думаю, относится к строкеSET result = POWER(2, expoent) * mantissa;

Ответы на вопрос(0)

Ваш ответ на вопрос