Autor Tema: ¿Cómo operar un número demasiado grande para Flash?

0 Usuarios y 1 Visitante están viendo este tema.

12 Julio, 2025, 12:43 pm
Leído 2083 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Tengo una cadena llamada DibujoEnBinario que representa un binario y necesito hacer cálculos como si fuese un decimal, así que lo convierto en decimal:
Código: [Seleccionar]
trace("DibujoEnBinario que hace la L invertida: "+DibujoEnBinario);
// Convertirlo en decimal:
DibujoaMostrar = 0;
do {
DibujoaMostrar = DibujoaMostrar+(Number(DibujoEnBinario.charat(NroDelCaracter))*Math.round(Math.pow(2, DibujoEnBinario.length-1-NroDelCaracter)));
trace("Convirtiendo en decimal... "+DibujoaMostrar);
NroDelCaracter++;
} while (NroDelCaracter<Cuadraditos);
DibujoaMostrar = Number(DibujoaMostrar);
trace("DibujoaMostrar calculado desde la L invertida: "+DibujoaMostrar);

Pero miren el resultado:
Citar
100000000
DibujoEnBinario que hace la L invertida: 1111111011111110111111101111111011111110111111101111111000000000
Convirtiendo en decimal... 9.22337203685478e+18
Convirtiendo en decimal... 1.38350580552822e+19
Convirtiendo en decimal... 1.61409010644959e+19
Convirtiendo en decimal... 1.72938225691027e+19
Convirtiendo en decimal... 1.78702833214061e+19
Convirtiendo en decimal... 1.81585136975578e+19
Convirtiendo en decimal... 1.83026288856337e+19
Convirtiendo en decimal... 1.83026288856337e+19
Convirtiendo en decimal... 1.83386576826527e+19
Convirtiendo en decimal... 1.83566720811621e+19
Convirtiendo en decimal... 1.83656792804169e+19
Convirtiendo en decimal... 1.83701828800443e+19
Convirtiendo en decimal... 1.83724346798579e+19
Convirtiendo en decimal... 1.83735605797648e+19
Convirtiendo en decimal... 1.83741235297182e+19
Convirtiendo en decimal... 1.83741235297182e+19
Convirtiendo en decimal... 1.83742642672066e+19
Convirtiendo en decimal... 1.83743346359507e+19
Convirtiendo en decimal... 1.83743698203228e+19
Convirtiendo en decimal... 1.83743874125089e+19
Convirtiendo en decimal... 1.83743962086019e+19
Convirtiendo en decimal... 1.83744006066484e+19
Convirtiendo en decimal... 1.83744028056717e+19
Convirtiendo en decimal... 1.83744028056717e+19
Convirtiendo en decimal... 1.83744033554275e+19
Convirtiendo en decimal... 1.83744036303054e+19
Convirtiendo en decimal... 1.83744037677443e+19
Convirtiendo en decimal... 1.83744038364638e+19
Convirtiendo en decimal... 1.83744038708235e+19
Convirtiendo en decimal... 1.83744038880034e+19
Convirtiendo en decimal... 1.83744038965934e+19
Convirtiendo en decimal... 1.83744038965934e+19
Convirtiendo en decimal... 1.83744038987408e+19
Convirtiendo en decimal... 1.83744038998146e+19
Convirtiendo en decimal... 1.83744039003514e+19
Convirtiendo en decimal... 1.83744039006199e+19
Convirtiendo en decimal... 1.83744039007541e+19
Convirtiendo en decimal... 1.83744039008212e+19
Convirtiendo en decimal... 1.83744039008548e+19
Convirtiendo en decimal... 1.83744039008548e+19
Convirtiendo en decimal... 1.83744039008632e+19
Convirtiendo en decimal... 1.83744039008673e+19
Convirtiendo en decimal... 1.83744039008694e+19
Convirtiendo en decimal... 1.83744039008705e+19
Convirtiendo en decimal... 1.8374403900871e+19
Convirtiendo en decimal... 1.83744039008713e+19
Convirtiendo en decimal... 1.83744039008714e+19
Convirtiendo en decimal... 1.83744039008714e+19
Convirtiendo en decimal... 1.83744039008714e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
Convirtiendo en decimal... 1.83744039008715e+19
DibujoaMostrar calculado desde la L invertida: 1.83744039008715e+19

Según GPT, los números grandes en Flash no se guardan bien, se vuelven inexactos, no sé si agrega "," y números después o no, pero voy a asumir que falla en los enteros también.

Y necesito el número exacto.

Necesito hacer esto:
Disminucion = Math.floor(DibujoaMostrar/Cuadros);

Y necesito irle restando esa disminución en un loop.

¿Qué tendría que hacer?

Parece que en vez de convertirlo en número decimal, convertirlo en una cadena que represente a un número decimal.

Yo a penas pude convertirlo a decimal, no sé bien cómo se hace. Que además deba ser una cadena, menos sé hacerlo.
¿Cómo convierto una cadena que representa a un binario, en una cadena que representa a un decimal?

Luego a esa cadena que representa un decimal, tendria que dividirla por otro número (que por suerte nunca sería tan grande).
¿Cómo divido entre un número, a un número representado por una cadena? Además el resultado debe ser una cadena.

Con eso tenemos Decimal y ResultadoDeDivision.

Por último a Decimal tengo que restarle ResultadoDeDivision en un loop. Esto capáz que sería lo más fácil, sería como programar que la operación de restar se haga como la haríamos en papel, viendo cuales son los últimos caracteres, para empezar.

PD: No voy a usar otro programa/lenguaje.

O quizá sería más fácil hacer las operaciones usando las cadenas binarias, creo que no necesito los decimales.