Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

160
Views
¿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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!