Error extraño en el número de JavaScript que se detiene en un exponente arbitrario [cerrado]

-3

Tengo un error extraño en mi proyecto que parece que no puedo resolver. Tengo un contador que aumenta constantemente desde 0 hasta exponentes increíblemente grandes. Parece estar funcionando bien, pero una vez que llega a 10e37, aumentará de 1.23e37 a 5.94e37 a 9.99e37, por ejemplo, y luego simplemente vuelve a bajar a 1.00e37 y sigue repitiéndose allí. La única operación que estoy realizando aquí es solo una operación de suma en la suma y nuevamente, funciona para todo lo más pequeño, pero permanece en este punto por una razón aparentemente arbitraria. No hay nada en mi código que indique esto como un punto de parada, así que estoy realmente confundido. Según tengo entendido, Numbers en javascript puede contener valores de hasta 10e308, por lo que no veo por qué sucedería esto. El valor se convierte en un bigDecimal en momentos en que es un número muy pequeño,así que supongo que tal vez haya un problema con eso, pero al mismo tiempo no lo creo porque antes de eso (en un número como 10e35), por ejemplo, está funcionando totalmente como se esperaba. Imprimir el valor en cada iteración indica que está funcionando correctamente en números grandes, por lo que estoy realmente confundido sobre por qué se detendría en este punto.

Esta es la operación:

energyCount = bigDecimal.add(energyCount.getValue(), String((((1 + multi)**(1 + expo)) * 0.00000000016)))

Las variables multi y expo son para incrementar la velocidad a la que se incrementa el energyCount. Una vez que energyCount está en el rango de 1e37, sigue repitiéndose en ese rango, en lugar de ir a 1e38. En este punto, multi y expo deberían ser iguales a aproximadamente 120 y 20 respectivamente. La impresión producirá algo como

9.28e37
9.56e37
9.84e37
1.00e37

en lugar de

9.28e37
9.56e37
9.84e37
1.00e38
8
  • Incluya un fragmento de código, como mínimo, lo suficiente para reproducir el problema.
    CVerica
    14 oct a las 0:18
  • 2
    Estás llegando al límite de la precisión del punto flotante.
    Barmar
    14 oct a las 0:18
  • @CVerica agregó contexto 14 oct a las 0:21
  • ¿Cuál es la idea de esto? String ((((1 + multi) ** (1 + expo)) * 0.00000000016))
    Strella
    14 de oct a las 0:22
  • la operación de adición bigDecimal requiere una cadena @Strella 14 oct a las 0:23