Фон
Quaternion - это система счисления, расширяющая комплексные числа. Кватернион имеет следующую форму
где - действительные числа, а - три фундаментальных кватернионных единицы . Единицы имеют следующие свойства:
Обратите внимание, что умножение кватернионов не является коммутативным .
задача
Учитывая нереальный кватернион, вычислите хотя бы один из его квадратных корней.
Как?
Согласно этому ответу 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)
?