一个简单的连分数计算器






4.41/5 (8投票s)
两个有限简单连分数的加、减、乘、除基本运算
引言
我刚开始接触简单连分数(SCF),但网上有很多关于它们的文献
而且,似乎有很多数学应用,包括分形。
背景
CF
类是执行这四种基本运算(减、加、乘、除)的唯一类。我遵循了 S. Mugassabi 的两篇文档 [1] [2] 来执行这些运算。
使用代码
实例化可以根据传递的参数以三种方式进行
- 一个分子和一个分母
- 一个双精度浮点数
- 一个 List(Of BigInteger)
对象
传递一个 Double
,它将被转换为分子和分母都等于一的数。如果双精度浮点数值不是整数,它将乘以 10(以及分母)直到转换为整数为止。这是因为项存储为 BigInteger
,如果不是,小数部分将会丢失。例如,如果我们实例化
Dim operandA as new CF(1.5)
1.5 将转换为分子 (=15) 和分母 (=10),并简化为 3/2 (=1+1/2)。整数部分为一,分数部分为 1/2。因此,它将定义两个项 [1; 2] = 1+1/2
传递一个 BigInteger
列表相当于定义 SCF。例如,如果列表是 {1,2,3},那么 SCF 将如下所示
1 1 + -------------- 1 2 + ----- 3
进行运算就像对数字进行运算一样简单
Dim operatorA = new CF(1.5)
Dim operatorB = new CF(0.5)
Dim operatorC = operatorA + operatorB
Console.WriteLine(operatorC.ToString)
' will show [1; 1] = 2/1 = 2 (the SCF = num./denom. = ToDouble())
限制
该计算器可以处理小的或大的 Double
值,例如 1e-100 或 1e+100,但 ToDouble()
方法当然会受到 Double
最大值和最小值的限制。
这不适用于方法 ToNumDen()
,它返回一个包含两个元素的 BigInteger
数组:计算出的分子和所有 SCF 的分母。
历史
版本 1.0.3 (2024/07/12)
一些修复,包括 CF
类有时会生成单个项。
版本 1.0.5 (2024/07/21)
在加法和减法的特殊情况下进行了一次修复,在这些情况下,结果有两个项。例如,1/3+1/6。
发布了一个控制台 (Cli) 版本。
版本 1.0.6.0 (2024/07/24)
在乘法和除法的某些特殊情况下进行了一次修复 ,其中较短的操作数少于三个 项。
显示周期性连分数已得到改进。
参考文献
[1]. Mugassabi, S. I., & Mistiri, F. (2015). “The Elementary Arithmetic Operators of Continued Fraction”。
[2]. Mugassabi, S. I., & Amsheri, S., M. (2019). “The Multiplication and Division of Simple Continued Fractions”。