Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

159
Vistas
¿Por qué el redondeo no es una solución al problema del determinismo de coma flotante?

Estoy buscando hacer un juego en red determinista y en todas partes en línea hay historias sobre cómo las matemáticas de punto flotante no son deterministas y, a menudo, darán resultados diferentes en diferentes computadoras, arquitecturas, procesadores, navegadores, etc.

Una de las razones de esto es que algunos procesadores pueden hacer operaciones matemáticas con una precisión de 80 bits (¿x87, creo?) y luego truncar a 64 bits para obtener el resultado final.

Luego, si lee estas publicaciones, la gente siempre menciona hacer todas las matemáticas con números enteros, usar bibliotecas matemáticas de punto fijo muy lentas o reescribir bibliotecas matemáticas completas para que sean deterministas.

Pero, estoy confundido. Para todas las matemáticas en mi juego, realmente no me importa si mi coma flotante tiene 5 decimales de precisión frente a 15. Entonces, ¿por qué la solución a este problema no es simplemente redondear?

Es decir, cada vez que realice una operación en puntos flotantes, aplique esta función al resultado:

 function round(n) { return Math.truncate(n * 100000) / 100000; }

Realmente no me importa que esto haga que mis flotadores sean menos precisos. Realmente no necesito niveles de precisión dementes de todos modos. Pero, ¿no soluciona esto el problema del determinismo de coma flotante? Porque si bien los diferentes procesadores pueden tener resultados ligeramente diferentes en las funciones matemáticas, ninguno de ellos estará tan lejos, ¿no? Entonces, si simplemente redondeamos el resultado a 6 decimales con la función anterior, ¿no deberían todas las arquitecturas dar los mismos resultados?

Y luego no tiene que reescribir toda su biblioteca matemática o usar operadores de punto fijo extremadamente lentos en todas partes. Marcando esto como Javascript porque realmente solo me importa lo relacionado con Javascript personalmente, aunque es un poco agnóstico del lenguaje.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda