sfondo
Quaternion è un sistema numerico che estende numeri complessi. Un quaternione ha la seguente forma
dove sono numeri reali e sono tre unità quaternione fondamentali . Le unità hanno le seguenti proprietà:
Si noti che la moltiplicazione del quaternione non è commutativa .
Compito
Dato un quaternione non reale , calcola almeno una delle sue radici quadrate.
Come?
Secondo questa risposta Math.SE , possiamo esprimere qualsiasi quaternione non reale nella seguente forma:
dove sono numeri reali e è il vettore unitario immaginario nella forma con . Qualunque ha la proprietà , quindi può essere vista come unità immaginaria.
Quindi il quadrato di è simile al seguente:
Inversamente, dato un quaternione , possiamo trovare la radice quadrata di risolvendo le seguenti equazioni
che è identico al processo di ricerca della radice quadrata di un numero complesso.
Si noti che un numero reale negativo ha infinitamente molte radici quadrate di quaternione, ma un quaternione non reale ha solo due radici quadrate .
Ingresso e uscita
L'input è un quaternione non reale. Puoi prenderlo come quattro numeri reali (in virgola mobile), in qualsiasi ordine e struttura di tua scelta. Non reale significa che almeno uno di è diverso da zero.
L'output è uno o due quaternioni che, al quadrato, sono uguali all'input.
Casi 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
Generato usando questo script Python . È stata specificata solo una delle due risposte corrette per ciascun caso di test; l'altro è tutti e quattro i valori negati.
Punteggio e criterio di vincita
Si applicano le regole standard del code-golf . Vince il programma o la funzione più breve in byte in ogni lingua.
a,[b,[c,[d]]]
va bene, se riesci in qualche modo a salvare byte con esso :)
a, (b, c, d)
?