Antecedentes
Quaternion es un sistema de números que extiende números complejos. Un cuaternión tiene la siguiente forma
donde son números reales e son tres unidades fundamentales de cuaternión . Las unidades tienen las siguientes propiedades:
Tenga en cuenta que la multiplicación de cuaterniones no es conmutativa .
Tarea
Dado un cuaternión no real , calcule al menos una de sus raíces cuadradas.
¿Cómo?
De acuerdo con esta respuesta de Math.SE , podemos expresar cualquier cuaternión no real de la siguiente forma:
donde son números reales y es el vector unitario imaginario en la forma con . Cualquiera de estas tiene la propiedad , por lo que puede verse como la unidad imaginaria.
Entonces el cuadrado de ve así:
Inversamente, dado un cuaternión , podemos encontrar la raíz cuadrada de resolviendo las siguientes ecuaciones
que es idéntico al proceso de encontrar la raíz cuadrada de un número complejo.
Tenga en cuenta que un número real negativo tiene infinitas raíces cuadradas de cuaterniones, pero un cuaternión no real tiene solo dos raíces cuadradas .
Entrada y salida
La entrada es un cuaternión no real. Puede tomarlo como cuatro números reales (punto flotante), en cualquier orden y estructura de su elección. No real significa que al menos uno de es distinto de cero.
La salida es uno o dos cuaterniones que, al cuadrado, son iguales a la entrada.
Casos de prueba
Input (a, b, c, d) => Output (a, b, c, d) rounded to 6 digits
0.0, 1.0, 0.0, 0.0 => 0.707107, 0.707107, 0.000000, 0.000000
1.0, 1.0, 0.0, 0.0 => 1.098684, 0.455090, 0.000000, 0.000000
1.0, -1.0, 1.0, 0.0 => 1.168771, -0.427800, 0.427800, 0.000000
2.0, 0.0, -2.0, -1.0 => 1.581139, 0.000000, -0.632456, -0.316228
1.0, 1.0, 1.0, 1.0 => 1.224745, 0.408248, 0.408248, 0.408248
0.1, 0.2, 0.3, 0.4 => 0.569088, 0.175720, 0.263580, 0.351439
99.0, 0.0, 0.0, 0.1 => 9.949876, 0.000000, 0.000000, 0.005025
Generado usando este script de Python . Solo se especifica una de las dos respuestas correctas para cada caso de prueba; el otro es los cuatro valores negados.
Criterio de puntuación y ganador
Se aplican reglas estándar de código de golf . El programa o función más corto en bytes en cada idioma gana.
a,[b,[c,[d]]]
está bien, si de alguna manera puedes guardar bytes con él :)
a, (b, c, d)
?