65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单的连分数计算器

2024年7月2日

MIT

2分钟阅读

viewsIcon

9027

downloadIcon

370

两个有限简单连分数的加、减、乘、除基本运算

引言

我刚开始接触简单连分数(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”。

© . All rights reserved.