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

143
Vistas
¿Por qué mi cálculo del cubo de rubik está errado en 4000?

Estoy tratando de juntar un código javascript rápido y sucio para darme la cantidad de posibles permutaciones de piezas en un cubo de rubik dada una restricción como "1 pieza de borde está resuelta". (apegándome a 3x3 por simplicidad) Cuando ejecuto las 12 piezas de borde normales y las 8 esquinas a través de mi función, me da un número que es 4000 mayor de lo que puedo encontrar, debería ser la respuesta. (La función me da 43,252,003,274,489,860,000 pero https://www.youtube.com/watch?v=z2-d0x_qxSM dice que debería ser 43,252,003,274,489,856,000)

Mi código:

 // 3x3x3 Rubik's Cube edgepieces = 12; cornerpieces = 8; centerpieces = 6; // total possible permutations in general function numCombos(edges, corners) { result = ((factorial(edges) * (factorial(corners)) / 2) * (2 ** (edges - 1)) * (3 ** (corners - 1))); return result; } // n! function factorial(x) { if (x == 0) { return 1; } else { return x * factorial(x - 1); } } console.log(numCombos(edgepieces, cornerpieces) + '\n');

He seguido un par de arreglos diferentes para el algoritmo de resultado central y todos me dan este resultado final. ¿Qué me estoy perdiendo?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede usar valores BigInt para evitar problemas de precisión de punto flotante:

 // 3x3x3 Rubik's Cube edgepieces = 12n; cornerpieces = 8n; centerpieces = 6n; // total possible permutations in general function numCombos(edges, corners) { result = ((factorial(edges) * (factorial(corners)) / 2n) * (2n ** (edges - 1n)) * (3n ** (corners - 1n))); return result; } // n! function factorial(x) { if (x == 0) { return 1n; } else { return x * factorial(x - 1n); } } console.log(numCombos(edgepieces, cornerpieces) + '\n');

about 4 years ago · Juan Pablo Isaza Denunciar

0

Los números de punto flotante de doble precisión tienen 53 bits de precisión, que son casi 16 dígitos de precisión. [1] Espera un resultado con 17 dígitos de precisión. Es posible que el número ni siquiera pueda ser representado por un doble.

La solución simple es usar números BigInt en lugar de números de coma flotante.


  1. registro 10 ( 2 53 ) = 15.95...
about 4 years ago · Juan Pablo Isaza Denunciar
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