Contexte
Quaternion est un système numérique qui étend les nombres complexes. Un quaternion a la forme suivante
où sont des nombres réels et sont trois unités quaternion fondamentales . Les unités ont les propriétés suivantes:
Notez que la multiplication par quaternion n'est pas commutative .
Tâche
Étant donné un quaternion non réel , calculez au moins une de ses racines carrées.
Comment?
Selon cette réponse Math.SE , nous pouvons exprimer tout quaternion non réel sous la forme suivante:
où sont des nombres réels et est le vecteur d'unité imaginaire sous la forme avec . Un tel a la propriété , il peut donc être considéré comme l'unité imaginaire.
Alors le carré de ressemble à ceci:
Inversement, étant donné un quaternion , nous pouvons trouver la racine carrée de en résolvant les équations suivantes
qui est identique au processus de recherche de la racine carrée d'un nombre complexe.
Notez qu'un nombre réel négatif a une infinité de racines carrées de quaternion, mais un quaternion non réel n'a que deux racines carrées .
Entrée et sortie
L'entrée est un quaternion non réel. Vous pouvez le prendre comme quatre nombres réels (virgule flottante), dans l'ordre et la structure de votre choix. Non réel signifie qu'au moins l'un des est non nul.
La sortie est un ou deux quaternions qui, lorsqu'ils sont au carré, sont égaux à l'entrée.
Cas de test
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
Généré à l'aide de ce script Python . Une seule des deux bonnes réponses est spécifiée pour chaque cas de test; l'autre est la négation des quatre valeurs.
Critère de notation et de victoire
Les règles de code-golf standard s'appliquent. Le programme ou la fonction la plus courte en octets dans chaque langue gagne.
a,[b,[c,[d]]]
va, si vous pouvez en quelque sorte économiser des octets :)
a, (b, c, d)
?