背景
四元数是扩展复数的数字系统。四元数具有以下形式
其中是实数,是三个基本四元数单元。这些单位具有以下属性:
注意,四元数乘法不是可交换的。
任务
给定一个非实四元数,请至少计算其平方根之一。
怎么样?
根据此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)
吗?