Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

145
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda