¿Como saltar el limite de 15 Digitos? (Espec. 754 del IEEE)
Publicado: 15 Oct 2014 11:22
Estube en la busqueda de convertir de Hexadecimal (Radix 16) a decimal (Radix 10) y encontré esto en el foro viewtopic.php?f=3&t=2272, que es justo lo que estaba buscando, pero lamentablemente este codigo que puso pabloko no funciona o talvez si pero no sé xD
(da como resultado "4294967295") , pero esta mal! ya que al utilizar el programa "Haxial Calculator" (https://mega.co.nz/#!NoczQDBL!ezZYDK1k4 ... DjBUxPrWAU), me da este resultado: "6637008361484516120249736644937798"

Asi que pensé en crear una función basandome en lo que indican en la web que pabloko paso en el hilo ya mencionado https://sooeet.com/math/base-converter.php, para luego darme cuenta que en foro del mismo "Indigo Rose" ya habia alguien que habia desarrollado dicha funcion, y es esta;
Pero no funciona completamente bien!, ya que apartir del digito 14, cambia totalmente el resto del resultado y da esto: "6.6370083614845e+033", y me parecio sumamente extraño que lo hiciera, asi que me puse a investigar en internet y encontré una particularidad llamada "especificación 754 del IEEE", que la nombran aca http://exceltotal.com/errores-de-precision-en-excel/ , asi que pence que el AMS era el que tenia dicha limitación asi que me fui al "Live" del mismo LUA (http://www.lua.org/cgi-bin/demo), y me dio el mismo resultado

Hasta hice una prueba con la calculadora que trae "Google" y me el mismo resultado, osea,,, ningun programa puede calcular como lo hace el Haxial Calculator? (y así obtener el resultado correcto), y no solo se trata al combertir algo de algo, simplemente al hacer una suma sencilla y que el resultado sobrepase los 15 digitos, el AMS te da resultado erroneo, (creo que es redondeado, no sé, ),
¿Como podría resolver este problema?
decimal=tonumber("01473AD2A1F8EA868721D26A1E4846", 16)..""
(da como resultado "4294967295") , pero esta mal! ya que al utilizar el programa "Haxial Calculator" (https://mega.co.nz/#!NoczQDBL!ezZYDK1k4 ... DjBUxPrWAU), me da este resultado: "6637008361484516120249736644937798"

Asi que pensé en crear una función basandome en lo que indican en la web que pabloko paso en el hilo ya mencionado https://sooeet.com/math/base-converter.php, para luego darme cuenta que en foro del mismo "Indigo Rose" ya habia alguien que habia desarrollado dicha funcion, y es esta;
function Hex2Dec(sValue)
bFigErr = false;
if type(sValue) == "number" then
sValue = sValue.."";
end
sValue = String.TrimLeft(sValue, "0");
nDigits = String.Length(sValue);
nTotal = 0;
-- 414 = 4*16^2 + 1*16^1 + 4*16^0 power = base^exp
while nDigits > 0 do
sIn = String.Upper(String.Left(sValue, 1));
if sIn > "9" then
if sIn == "A" then
nFactor = 10;
elseif sIn == "B" then
nFactor = 11;
elseif sIn == "C" then
nFactor = 12;
elseif sIn == "D" then
nFactor = 13;
elseif sIn == "E" then
nFactor = 14;
elseif sIn == "F" then
nFactor = 15;
else
-- error
bFigErr = true;
sTotal = "";
break;
end
else
nFactor = String.ToNumber(sIn);
end
-- go
nTotal = nTotal + nFactor * Math.Pow(16, nDigits - 1);
error = Application.GetLastError();
if error == 0 then
sValue = String.TrimLeft(sValue, sIn);
nDigits = nDigits - 1;
else
sTotal = "";
bFigErr = true;
break;
end
end
if not bFigErr then
sTotal = nTotal.."";
end
return sTotal;
end
Pero no funciona completamente bien!, ya que apartir del digito 14, cambia totalmente el resto del resultado y da esto: "6.6370083614845e+033", y me parecio sumamente extraño que lo hiciera, asi que me puse a investigar en internet y encontré una particularidad llamada "especificación 754 del IEEE", que la nombran aca http://exceltotal.com/errores-de-precision-en-excel/ , asi que pence que el AMS era el que tenia dicha limitación asi que me fui al "Live" del mismo LUA (http://www.lua.org/cgi-bin/demo), y me dio el mismo resultado

Hasta hice una prueba con la calculadora que trae "Google" y me el mismo resultado, osea,,, ningun programa puede calcular como lo hace el Haxial Calculator? (y así obtener el resultado correcto), y no solo se trata al combertir algo de algo, simplemente al hacer una suma sencilla y que el resultado sobrepase los 15 digitos, el AMS te da resultado erroneo, (creo que es redondeado, no sé, ),
¿Como podría resolver este problema?