ComplexContinuedFraction[x_] := Catch[
For[k = {}; i = 0,
i < -1,
i++,
If[GIRCF[x, i][[2]] === Indeterminate,
Append[k, Indeterminate]; Throw[k],
(*如果余值出现未定义,将未定义加入到列表中并输出结果*)
If[GIRCF[x, i][[2]] === 0, Throw[k],
Append[k, GIRCF[x, i][[1]]]]]]]
(*如果余值未出现0,GIRCF[x,i]\[LeftDoubleBracket]1\[RightDoubleBracket]\
加入到列表直到余值为0并输出结果*)
(*可行性测试*)
ComplexContinuedFraction[466611/200 + (1332201 I)/2000]
以上是没有输出的函数。
==========================================================================
前置代码:
GaussianIntegerRegularContinuedFraction[fn___] := GIRCF[fn];
GIRCF[x_, dx_, k_Integer] := GIRCF`Core[Rationalize[x, dx], k];
GIRCF[x_, k_Integer] := GIRCF`Core[Rationalize[x], k];
(*反正最后都是按有理数处理就不需要数值近似.*)
GIRCF`Core[x_, k_] := Block[{GIRCF`m = GIRCF`Core[x, k - 1][[2]]},
If[FractionalPart[GIRCF`m] === 0, {GIRCF`m, 0},
(*余值为0意味着规范连分数化的结束*)
If[IntegerPart[GIRCF`m] === 0,
{GIRCF`m, Indeterminate},
(*并非每一个复数都可以在高斯整数下被规范连分数化*)
{IntegerPart[GIRCF`m], 1/FractionalPart[GIRCF`m]}]]] /; k >= 1;
GIRCF`Core[x_, 0] :=
If[FractionalPart[x] === 0, {x, 0}, {IntegerPart[x], 1/
FractionalPart[x]}];
GIRCF`Core[x_, k_] := {IntegerPart[x*10^k], IntegerPart[x*10^k] - x} /;
k <= -1;
(*可行性测试1*)
a = Rationalize[2333.055 + 666.1005 I];
Do[Print[GIRCF`Core[a, n]], {n, 9}]
(*可行性测试2*)
a = Rationalize[2333.12345 + 666.54321 I];
Do[Print[GIRCF`Core[a, n]], {n, 8}]