Фон
Кватерніон - система числення, яка розширює складні числа. Кватерніон має таку форму
де - дійсні числа, а - три основні кватерніонні одиниці . Агрегати мають такі властивості:
Зауважимо, що множення кватерніона не є комутативним .
Завдання
Враховуючи нереальний кватерніон, обчисліть хоча б одне його квадратне коріння.
Як?
Відповідно до цієї відповіді Math.SE , ми можемо висловити будь-який нереальний кватерніон у такій формі:
де - дійсні числа і - уявний одиничний вектор у вигляді з . Будь-який такий має властивість , тому його можна розглядати як уявну одиницю.
Тоді квадрат виглядає так:
І навпаки, задавши кватерніон , ми можемо знайти квадратний корінь , розв’язавши наступні рівняння
що тотожне процесу знаходження квадратного кореня складного числа.
Зауважте, що від'ємне дійсне число має нескінченно багато квадратних коренів кватерніона, але нереальне кватерніон має лише два квадратних кореня .
Вхід і вихід
Введення - нереальний кватерніон. Ви можете прийняти його як чотири реальних числа (з плаваючою комою) у будь-якому порядку та структурі на ваш вибір. Нереальне означає, що принаймні один з не дорівнює нулю.
Вихід - це один або два кватерніона, які при квадраті дорівнюють вводу.
Тестові справи
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
Створено за допомогою цього сценарію Python . Для кожного тестового випадку вказується лише одна з двох правильних відповідей; інше - усі чотири значення заперечуються.
Критерій оцінювання та виграшу
Діють стандартні правила гольф-коду . Виграє найкоротша програма або функція в байтах на кожній мові.
a,[b,[c,[d]]]
чудово, якщо ви зможете якось зберегти байти за допомогою нього :)
a, (b, c, d)
?